役割に基づいてWebサイトに異なるビューを実装する最良の方法は何ですか?
質問
ASP.NETでは、次のことを行う最良の方法は何ですか:
- あなたの権利に基づいて特定のコントロールを表示しますか?
- gridviewコントロールの場合、役割に基づいて特定の列をどのように表示しますか?
2番を考えています。データはデータベースのロール固有のビューから取得します。
解決
実際にロールを使用して特定のコントロールを非表示/表示する代わりに、各ロールに別のアクセス許可層を設け、それらに基づいて表示/非表示にすることをお勧めします。
そのようにして、ロールが持つ権限を再定義でき、コードを変更する必要はありません。
また、これにより、将来新しい役割を作成し、その役割に一連の権限を割り当てることができます。
コントロールについては、はい... user.IsInRole(" permissionname")値に基づいてコントロールのVisibleプロパティを設定するだけです。
グリッドの場合も同じことを行います...列の可視性をIsInRoleブール値に設定します。
//Delete Icon Column
gridViewContacts.Columns[0].Visible = user.IsInRole("DeleteAnyContact");
非常にきめ細かい性質で権限を作成します。
- ViewAnyContact
- ViewOwnContact
- EditOwnContact
- EditAnyContact
- AddAnyContact
- DeleteOwnContact
- DeleteAnyContact
- など...
他のヒント
ロールベースのルートを使用する場合、ASP.NET(バージョン2.0以降)には、このシナリオに役立つさまざまなメンバーシップコントロールが用意されています。インボックスメンバーシッププロバイダーを使用していると仮定すると(これは間違いの多い仮定かもしれません)、実際に LoginView
コントロールを使用して#1を処理できます。
動作方法は、 LoginView
が RoleGroups
および関連する ContentTemplates
を使用して、役割に基づいてユーザーのビューをカスタマイズできることです。これは、インボックスメンバーシッププロバイダーとシームレスに機能します。マイクロソフトのテクノロジーに基づいて独自のメンバーシッププロバイダーを構築すれば、それも機能すると考えています。 (この後のステップはまだ実行していません。)
おそらく#2に使用できますが、コードと手間が重複することになります。これは私の個人的な好みではありません。ロール固有のSQLビューを使用してそのテーブルを駆動することは、このオプションよりも優れていると思います。 (もちろん、他のオプションもありますが、より良いかもしれません。)
ロールの代わりにパーミッションを使用するという2番目のElijah Manorの推奨事項を説明します。一般的に、それも私の好みです。 (そして、メンバーシッププロバイダーのテクノロジがそのレベルに達していないことを知って驚いた)。 (これを実行しましたが、非常に柔軟ですが、特定のページを保護するためのコードは複雑になります。)
編集:おaび申し上げます。 LoginViewコントロールへのリンクを含めるつもりでした。 DotNetJunkiesにはチュートリアルがあります。