動的データとActive Directoryを使用して役割ベースのセキュリティを実装する方法

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

質問

asp.netダイナミックデータサイトでActive Directoryロールを使用してセキュリティを実装する最良の方法は何ですか?

特定のビュー(および関連リンク)を特定のロールに制限したいと思います。 つまり、ユーザーAは表xのリストアクションのみを表示でき、ユーザーBは表yのリストアクションのみを表示できます

役に立ちましたか?

解決

このブログに、これに関する多くの記事がありますユーザーロールを使用したDynamicData属性ベースの権限ソリューションおよびこちら DynamicData:データベースベースの権限-パート1 およびIまた、ルートハンドラーを使用するコードプレックスでの動的データサンプルの保護もご覧ください。 。

他のヒント

多くのアプリケーションでこれを実行しました。

アプリケーションでWindows認証を有効にします。

ユーザーの資格情報を保存できるオブジェクトを作成し、そのオブジェクトをセッションに保存して、すばやく取得できるようにします。存在しない場合は、すぐに再構築できます。私は通常、それぞれの役割を少しずつ設定しています:


enum USER_ROLE : int
{
  Role1 = 1,
  Role2 = 2,
  Role3 = 4,
  Role4 = 8,
  etc
}

if (Context.User.IsInRole("Roll1Name")) YourUserObject.Roles += USER_ROLE.Role1;
if (Context.User.IsInRole("Roll2Name")) YourUserObject.Roles += USER_ROLE.Role2;
etc

コントロールを保護する必要があるときはいつでも、ユーザーのロールとそのコントロールのセキュリティ要件に基づいてHtmlControlとプロパティを受け取る関数に渡します。

たとえばbool SetControlSecurity(HtmlControl ctrl、int iUserRoles、int iControlRoles、ACTION eAction)

したがって、パネルを実行する例は次のようになります。

SetControlSecurity(pnlUserInfo、YourUserObject.Roles、eRole.Role2、ACTION.Hide);

通常、非表示、読み取り専用、データのクリアなど、セキュリティの失敗時に実行するアクションのタイプにパラメーターを設定します。

関数内での役割の比較は簡単です:


bool bHasAccess = ((iUserRole & iControlRoles) > 0);
if (bHasAcess)
{
  // leave the control or make sure it is visible etc
}
else
{
  // take action to secure the control based on the action
}

役立つこと。

ASP.NET Active Directory Memebrship&を使用できます。アプリケーションに対するユーザーの認証と承認を行うロールプロバイダー。その後、確認したい場所で Roles.IsUserInRole を呼び出すことができます。コンテンツをレンダリングする前に、ADロールメンバーシップがユーザーをチェックすることは、関連するグループの一部です。

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