asp.net 動的データ サイトで Active Directory ロールを使用してセキュリティを実装する最善の方法は何ですか?
特定のビュー (および関連リンク) を特定のロールに制限したいと考えています。つまり、ユーザー A はテーブル x のリスト アクションのみを表示でき、ユーザー B はテーブル y のリスト アクションのみを表示できます。
asp.net 動的データ サイトで Active Directory ロールを使用してセキュリティを実装する最善の方法は何ですか?
特定のビュー (および関連リンク) を特定のロールに制限したいと考えています。つまり、ユーザー A はテーブル x のリスト アクションのみを表示でき、ユーザー B はテーブル y のリスト アクションのみを表示できます。
私は多くのアプリケーションでこれを行いました。
アプリケーションで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
}
お役に立てば幸いです。
これに関する私のブログには、ユーザー ロールを使用したDynamicData Attribute Based Permission Solutionと、 DynamicData: Database Based Permissions - Part 1の記事が多数あります。
ASP.NET Active Directory Memebrship & Role プロバイダーを使用して、アプリケーションに対するユーザーの認証と承認を行うことができます。次に、コンテンツをレンダリングする前に、AD ロール メンバーシップを確認したい場所でRoles.IsUserInRoleを呼び出して、ユーザーが関連するグループの一部であることを確認できます。