役割に基づいてWebサイトに異なるビューを実装する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/210069

  •  03-07-2019
  •  | 
  •  

質問

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

  1. あなたの権利に基づいて特定のコントロールを表示しますか?
  2. 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にはチュートリアルがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top