1

ASP.NET Coreアプリケーションで標準の認証システムをセットアップしました。 (権限として機能する)ASP.NET Core IdentityでAuthorize属性を持つ複数のポリシーの1つを確認する

ユーザ、ロール、RoleClaims

Startup.csで私はそれぞれの役割や、各許可のポリシーを作成します。これが私のビューに完全な柔軟性を与えるとすれば、ユーザーがDeleteCustomerを要求するロールの一部である場合、またはUserがロールSuperuserに属している場合に、このボタンを表示させることができます。

Authorize属性を使用してOR条件を実行するにはどうすればよいですか。たとえば、私のサイト全体では、SuperuserRole Policyにすべての権限を完全に付与したいと考えています。アクションメソッドの私は、次のを持っているとしましょう以上

[承認(ポリシー=「EditCustomer」)]

これは、ログインしているユーザーは、請求項を持つロールに割り当てられている必要があります:Edit.CustomerクレームEdit.Customerのポリシーを作成しています。これはうまくいきますが、ロールスーパーユーザを持つユーザがEditCustomerアクションメソッドにアクセスできるようにするにはどうすればよいですか?スーパーユーザーは、データベースにRoleとして追加され、さらにRequireSuperUserというポリシーとして追加されます。

+0

これはあなたのために働いていますか?私も同様の問題に直面していました。 @リチャード・ミーナンの答えは私の投票を得て、私のために働いた。それが他の人を助けるので、これに対する答えを得ることは良いでしょう。 – Bronumski

答えて

0

docsにしたがって、必要に応じてOR条件を追加することはできません。 2つのポリシーのように機能するか、既存のポリシーを拡張する新しいポリシーを作成する必要があります。

+0

申し訳ありませんが、私はコードロジックを含むカスタムポリシーを作成する必要がありますか?または、一緒にやろうとしていることをやめてください。私はすべての権限が有効になっている通常のユーザーとしてスーパーユーザーを扱うだけです。 –

2

あなたはStartup.csに追加したり、条件ができます:私は「ジョン・ドウ」を望んでいたところ、私は同様の問題に直面していた

services.AddAuthorization(options => { 
    options.AddPolicy("EditCustomer", policy => 
     policy.RequireAssertion(context => 
     context.User.HasClaim(c => (c.Type == "DeleteCustomer" || c.Type == "Superuser")))); 
}); 

、「ジェーン・ドウ」ユーザーが「エンディング契約」画面OR誰を表示するだけ「MIS」部門からも同じ画面にアクセスできるようにします。私が主張している "department"と "UserName"のタイプは、以下の通りです。

services.AddAuthorization(options => { 
    options.AddPolicy("EndingContracts", policy => 
     policy.RequireAssertion(context => context.User.HasClaim(c => (c.Type == "department" && c.Value == "MIS" || 
     c.Type == "UserName" && "John Doe, Jane Doe".Contains(c.Value))))); 
}); 
関連する問題