動的データとActive Directoryを使用して役割ベースのセキュリティを実装する方法
-
03-07-2019 - |
質問
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ロールメンバーシップがユーザーをチェックすることは、関連するグループの一部です。