4

ASP.NET では、次のことを行う最善の方法は何ですか。

  1. 権利に基づいて特定のコントロールを表示しますか?
  2. グリッドビュー コントロールの場合、ロールに基づいて特定の列をどのように表示しますか?

2 番目に考えているのは、データベースのロール固有のビューからデータを取得することです。

4

2 に答える 2

5

実際にロールを使用して特定のコントロールを非表示/表示する代わりに、各ロールに別のレイヤーのアクセス許可を設定し、それらに基づいて表示/非表示にすることをお勧めします。

そうすれば、ロールが持つ権限を再定義でき、コードを変更する必要がなくなります。

また、これにより、将来新しい役割を作成し、その役割に一連の権限を割り当てるだけで済みます。

コントロールに関しては、はい... user.IsInRole("permissionname") の値に基づいて、コントロールに Visible プロパティを設定するだけです。

グリッドについても同じことを行います... 列の Visibility を IsInRole ブール値に設定します。

//Delete Icon Column
gridViewContacts.Columns[0].Visible = user.IsInRole("DeleteAnyContact"); 

私は非常に細かい性質であなたの許可を作成します..のような

  • ViewAnyContact
  • ViewOwnContact
  • EditOwnContact
  • EditAnyContact
  • AddAnyContact
  • 自分の連絡先を削除
  • すべての連絡先を削除
  • 等...
于 2008-10-16T20:17:48.350 に答える
1

ロール ベースのルートを使用する場合、ASP.NET (バージョン 2.0 以降) には、このシナリオで役立つさまざまなメンバーシップ コントロールが用意されています。インボックス メンバーシップ プロバイダーを使用していると仮定すると (これは誤った仮定である可能性があります)、実際にLoginViewコントロールを使用して #1 を処理できます。

これが機能する方法は、ロールに基づいてユーザーのビューをカスタマイズするためにLoginView使用RoleGroupsし、それらを関連付けることです。ContentTemplatesこれは、インボックス メンバーシップ プロバイダーとシームレスに連携します。Microsoft のテクノロジに基づいて独自のメンバーシップ プロバイダーを構築する場合も、うまくいくと思います。(私はこの最後のステップを行っていません。)

おそらく、それを #2 に使用することもできますが、コードと労力が重複することになり、これは私の個人的な好みではありません。ロール固有の SQL ビューを使用してそのテーブルを駆動するという選択は、このオプションよりも優れていると思います。(もちろん、他のオプションもあり、より良いかもしれません。)

ロールの代わりにアクセス許可を使用するという Elijah Manor の推奨事項を支持します。一般的に、それは私の好みでもあります。(そして、メンバーシップ プロバイダーのテクノロジがそのレベルに達していないことを発見して、私は驚きました。) ただし、アクセス許可中心のシナリオでは、基本的にすべてを自分でロールバックする必要があります。(私はこれを行いました。非常に柔軟ですが、特定のページを保護するためのコードは毛むくじゃらになる可能性があります。)

編集:申し訳ありません。LoginView コントロールへのリンクを含めるつもりでした。DotNetJunkies にはチュートリアルがあります。

于 2008-10-16T20:28:51.900 に答える