Daizen Ikehara

インフラジスティックス・ジャパン株式会社でデベロッパー エバンジェリストとして活動しています。
[Silverlight] Visual Studio LightSwitch – Role ベースのセキュリティ [LightSwitch]

今回は Visual Studio LightSwitch アプリケーションでのセキュリティについての記事をご紹介します。特定のユーザーに権限を付与したり、アクセスを制限したりすることを LightSwitch ではどのように行うのでしょうか。

これまでの記事

元記事

業務用アプリケーションにおいて、セキュリティは非常に重要です。
Visual Studio LightSwitchはスクリーン、クエリとエンティティで定義された権限を簡単に確認することができます。

セキュリティはロールベースのLightSwitchアプリケーションに実装されます。

ロールベースのアプリケーションは、異なるロールとロールの権限を実装し、各ユーザーにロールを割り当てることができます。
セキュリティ実装を行うには、構築されるアプリケーションにフォーム認証かWindows認証のいずれかの認証が必要です。

サンプルアプリケーション

アプリケーションは以下の記事で使用したアプリケーションに基づいて作成されています。

動作要件

作成手順

  • 次の記事からサンプルアプリケーションをダウンロード Visual Studio LightSwitch - 概要 その2
  • ダウンロードしたアプリケーションのアクセス制御設定を変更フォーム認証
  • 権限の定義
  • セキュリティメソッドを記述し、権限を確認
  • アプリケーションを発行
  • LightSwitchのセキュリティ承認の設定

デモアプリケーションは2層型クライアントデスクトップLightSwitchアプリケーションとして配備されます。

・ 次の記事からサンプルアプリケーションをダウンロード Visual Studio LightSwitch - 概要 その2

・ ダウンロードしたアプリケーションのアクセス制御設定を変更フォーム認証

アプリケーションのプロパティ – [Acess Control] でデフォルトの設定を確認します。おそらく、「Do not enable authentication」になっています。

image

アクセス制御の設定を「Use Forms Authentication」に変更します。今回のサンプルではこの設定を使います。異なる組織(同じドメインでない)のユーザーがアプリケーションを使用する場合、「フォーム認証」に設定します。また、ユーザーが全て同じドメインの場合は「Windows認証」を設定します。

image

・ 権限の定義

作成されるLightSwitchアプリケーションで使う権限を追加します。

  • CanAccessInitialScreen – 初期画面へのアクセスを許可します。
  • CanAddProduct – ユーザーによる新しい製品エンティティの追加を許可します。
  • CanDeleteProduct – ユーザーによる製品エンティティの削除を許可します。
  • CanEditProduct – ユーザーによる製品エンティティの更新を許可します。

image

・ セキュリティメソッドを記述し、権限の確認

EditableIGProductsGrid画面を選択し、Designerを開きます。

image

WriteCodeのドロップダウンリストを開き、SecurityMethodsのカテゴリーからCanRunEditableIGProductsGridメソッドを選択します。
このメソッドを実装することにより、ユーザーの初期画面へのアクセスを制御することができます。

image

CanAccessInitialScreen権限に、条件付きのCanRunEditableIGProductsGridメソッドを実装します。

partial void CanRunEditableIGProductsGrid(ref bool result)
{
    result = this.User.HasPermission(
        Permissions.CanAccessInitialScreen);
}

ソリューション エクスプローラー のData SourcesからIGProductsSetを選択し、セキュリティメソッドを実装します。

  • IGProductsSet_CanDelete – CanDeleteProduct権限を確認し製品エンティティの削除を許可します。
  • IGProductsSet_CanInsert – CanAddProduct権限を確認し新しい製品エンティティの追加を許可します。
  • IGProductsSet_CanUpdate – CanEditProduct権限を確認し製品エンティティの更新を許可します。

image

image

// 削除の権限確認
partial void IGProductsSet_CanDelete(ref bool result)
{
    result = this.Application.User.HasPermission(Permissions.CanDeleteProduct);
}

// 追加の権限確認
partial void IGProductsSet_CanInsert(ref bool result)
{
    result = this.Application.User.HasPermission(Permissions.CanAddProduct);
}

// 更新の権限確認
partial void IGProductsSet_CanUpdate(ref bool result)
{
    result = this.Application.User.HasPermission(Permissions.CanEditProduct);
}

デバッグモードでLightSwitchアプリケーションを実行します。
初期画面は権限がないため、アクセス不可となっています。これは、開発段階においてアプリケーションが発行される前に、定義されたロールとユーザーがまだ存在していないのが原因です。

image

アプリケーションを終了します。

再度、InfraProducts プロジェクト –> プロパティ –> Access ControlでCanAccessInitialScreen の権限項目で、「Granted for debug」にチェックを入れます。
これにより、デバッグモードでは全てのユーザーに権限を付与します。

image

デバッグモードで再度アプリケーションを実行すると初期画面にアクセスできるようになります。

image

その他の権限を確認するため、「Net Advantage for .NET」という最初の製品エンティティを編集してください。
デバッグモードでCanEditProductの権限を付与していないため、編集が行えません。

image

・ アプリケーションを発行

LightSwitchデモアプリケーションのタイプは2層型クライアントデスクトップ(デフォルトの設定)です。

発行の詳細については、「Visual Studio LightSwitch – 2 Tier デスクトップ アプリケーションの配備方法」を参考にしてください。

アクセス制御設定でフォーム認証を設定したアプリケーションでは、デモアプリケーションを配備する際、該当するLightSwitchアプリケーションのAdministratorを設定する画面が表示され、 Administratorとそのパスワードを設定する必要があります。

image

・ LightSwitchのセキュリティ承認の設定

Administrator(LightSwitchアプリケーションがパブリッシュされた際に設定したユーザー)としてログインします。

image

権限の設定により、初期画面が表示されません。デフォルトでは、AdministratorにCanAccessInitialScreenの権限が付与されていません。

「Administration」 - 「Roles」 を選択し、Administrator ロールに新しく権限を追加します。

image

続いて、「Visitor」というロールを追加し、「demouser」というユーザーを作成します。「Visitor」のロールのユーザーにdemouserを追加します。
このロールにはCanAccessInitialScreenの権限のみを付与します。

image

image

Administrationの変更をすべて保存し、アプリケーションを再起動し Administrator ロールのユーザーとしてログインします。

image

グリッド上にある「Add..」ボタンを選択し、「NetAdvantage for .Net」という新しい製品を追加します。

image

変更点を保存し、現在の画面を更新します。
グリッドには新しく追加された製品が表示されます。

 

次に、Visitorのロールでテストを行ないます。

Demo User (visitorのロールを持っているユーザー)としてログインします。
初期画面が表示されます(deleteボタンは操作できません)。

image

「NedAdvantage for Silverlight LoB」という新しい製品を追加し、必要なプロパティを入力します。

image

このエンティティを保存しようとすると、現在のユーザーは「IGProductsSet」にエンティティを挿入する権限を持っていないというエラーメッセージが表示されます。

image

このように簡単にロール、ユーザーへの権限設定を行うことが可能になります。

Posted: 18 Nov 2010, 15:53

Comments

WPF と UX なBlog said:

今回は Visual Studio LightSwitch アプリケーションでのセキュリティについての記事をご紹介します。特定のユーザーに権限を付与したり、アクセスを制限したりすることを LightSwitch

# November 18, 2010 2:13 AM

.NET Clips said:

素敵なエントリーの登録ありがとうございます - .NET Clipsからのトラックバック

# November 21, 2010 6:17 AM

Daizen Ikehara said:

前回のエントリ では LightSwitch で Query を編集しました。   この状態ではは日付 1 と 日付 2 をさかさまにすると正しい結果が得られません   今回はこの問題点を解決します。

# May 16, 2011 6:02 PM

Daizen Ikehara said:

本日 2011 月 7 月 27 日 (米国時間では 7/26) にとうとう Visual Studio LightSwitch が RTM となりました! 正式名称は Visual Studio LightSwitch

# July 27, 2011 1:18 AM

Daizen Ikehara said:

別件で画像データを DB に保存し、そちらを活用する必要があったのですが、LightSwitch を使えば簡単に実現できるかな?と思ってやってみました。 合計所要時間は5分くらいでさくっと完成 1. DB

# July 27, 2011 10:08 PM

Hiro Tsukakoshi said:

皆様、Microsoft社から提供されているVisual Studio LightSwitchってご存知でしょうか? Visual Studio LightSwitchとは、おなじみVisual Studioシリーズの新しい開発環境であり、すばやく簡単にリッチな業務アプリケーションを構築することを目標に開発されたツールなんです。

# August 10, 2011 8:17 PM

Daizen Ikehara said:

マーケティング担当塚越の エントリ にもありましたが、 NetAdvantage for Visual Studio LightSwitch がリリースされました! 今回はシェルを利用する方法をご紹介します。

# August 24, 2011 3:42 AM

Daizen Ikehara said:

前回 は NetAdvantage for Visual Studio LightSwitch の シェル エクステンションをご紹介しましたが、今回はコントロール エクステンションとして提供されているチャート

# August 25, 2011 10:16 PM
Anonymous comments are disabled