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