18

私が取り組んでいるこのプロジェクトでは、管理者ユーザーのローカル データベースを保持し、通常のユーザーには外部データベースを使用する必要があります。管理データベースで認証を通過した人には「管理者」ロールが割り当てられ、他のデータベースで認証された人には常に「ユーザー」ロールが割り当てられます。

これらのロールを手動で割り当てることはできますか? ロールプロバイダーなどの複雑さは必要ありません。これらの2つのロールのみを使用しているため、認証するデータベースに常に基づいています。

サンプル コードやドキュメントへのリンクを提供していただけると、非常に助かります。ありがとう!

編集:

現在、私はロール プロバイダーを使用しておらず、ロール プロバイダーを作成するのは面倒なようです。「ベストプラクティス」ではないことはわかっていますが、ログイン時に 2 つの役割のうちの 1 つを割り当てるだけで済みます (これは変更されません)。また、ユーザーはロールごとに 2 つのデータベースに分割されているため、ロール情報をデータベースに保存することも意味がありません。

ここにいくつかの擬似コードがあります:

if (AdminDB.ValidateUser(username,password)==true) {
     SetAuthCookie(username);
     AssociateUserWithRole(username, 'admin');
} elseif (UserDB.ValidateUser(username,password)==true) {
     SetAuthCookie(username);
     AssociateUserWithRole(username, 'user');
} else {
     // Login failed.
}

その「ThisSession.AssociateUserWithRole」の部分はわかりません。基本的に、ユーザーが認証されると、ユーザーが属するロールを .NET に伝える必要があります。

4

4 に答える 4

16

ロール プロバイダーの実装は特に難しいことではありません。特に、ロール管理ではなく、ロール チェックのみを実装する場合はなおさらです。必要な部分を実装するだけで、残りは NotImplementedExceptions をスローします。アプリケーションが 1 つしかない場合は、その部分についてもあまり気にする必要はありません。必要な部分は、フレームワークがどのように使用するかではなく、フレームワークがそれをどのように使用するかによって決定されることに注意してください。たとえば、ユーザーが特定の役割にあるかどうかのみを確認したい場合でも、すべてのユーザーの役割を返すビットを実装する必要があると思います。

つまり、RoleProvider 全体を省略して、すべてをセッションで実行できます。この場合、独自のAuthorizeAttributeを実装し、その認証ビットとロール チェック ビットを独自のものに置き換えます。認証されたセッションにユーザーのロールを保存し、属性と、装飾したメソッド/クラスの属性に提供されたパラメーターを使用して、そこで確認します。

于 2009-08-19T02:52:46.050 に答える
6

asp.net に組み込まれているメンバーシップとロールを使用している場合は、AddUserToRole と RemoveUserFromRole を見てください。

http://msdn.microsoft.com/en-us/library/system.web.security.roles.addusertorole.aspx

ログイン方法に基づいて、必要に応じて追加および削除できます。

あなたの投稿からは、ロール プロバイダーを使用していないのか、独自のロール プロバイダーを作成したくないと言っているのかわかりませんでした。組み込みのロール プロバイダーを使用していない場合は、ログイン方法/場所に基づいてログイン時にユーザーを切り替えるために、任意のコーディング メカニズムを使用する必要があります。

編集:コードを表示し、asp.net ロール エンジンを使用していないと述べたので。

表示されるフォーム認証 Cookie を使用しているため、global.asax ファイルの authenticateRequest をオーバーライドし、必要に応じてロールを設定してチケットを作成します。

サンプルは次のとおりです: http://csharpdotnetfreak.blogspot.com/2009/02/formsauthentication-ticket-roles-aspnet.html

サンプルは役割を「取得」するだけですが、ここで役割を追加/変更できます。

于 2009-08-19T02:33:50.123 に答える
2

この記事(2003年以降)では、ユーザーに役割を割り当て、要求ごとにプリンシパルを置き換えるプロセスについて明確に説明していると思います(NerdDinnerと同様)。

ロールベースのセキュリティでユーザーを承認する:http: //msdn.microsoft.com/en-us/library/aa289844%28v=vs.71%29.aspx

于 2011-09-21T19:35:41.190 に答える
2

誰かが OWIN で同じ問題に遭遇した場合、これが役立つと思います。

var identityResult = await manager.CreateIdentityAsync(login, "MyAppCookie");

if (<user is admin>)
    identityResult.AddClaim(new System.Security.Claims.Claim(identityResult.RoleClaimType, "Admin"));
else
    identityResult.AddClaim(new System.Security.Claims.Claim(identityResult.RoleClaimType, "User"));

HttpContext.Current.GetOwinContext().Authentication.SignIn(identityResult);
于 2016-06-02T10:37:31.273 に答える