web-dev-qa-db-ja.com

ASP.NET 5 2つ以上のポリシーに対する承認

2つ以上のポリシーに対して承認を適用することはできますか? ASP.NET 5、rc1を使用しています。

[Authorize(Policy = "Limited,Full")]
public class FooBarController : Controller
{
    // This code doesn't work
}

そうでない場合、ポリシーを使用せずにこれをどのように達成できますか?このコントローラーにアクセスできるユーザーのグループには、「フル」と「制限」の2つのグループがあります。ユーザーは、「Full」または「Limited」、あるいはその両方に属します。このコントローラーにアクセスするには、2つのグループのいずれかに属する必要があります。

27
painiyff

あなたが望む方法ではありません。ポリシーは累積的に設計されています。たとえば、2つの別個の属性を使用する場合、両方ともパスする必要があります。

1つのポリシー内でOR条件を評価する必要があります。しかし、内でORとしてコーディングする必要はありません。単一のハンドラー複数のハンドラーを持つ要件を持つことができますハンドラーのいずれかが成功にフラグを立てると、要件が満たされますmy Authorization Workshop のステップ6を参照してください。

28
blowdart

新しいポリシー「LimitedOrFull」を設定したら(要求タイプ名と一致すると仮定)、次のような要件を作成します。

options.AddPolicy("LimitedOrFull", policy =>
    policy.RequireAssertion(context =>
        context.User.HasClaim(c =>
            (c.Type == "Limited" ||
             c.Type == "Full"))));

https://docs.Microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.1#using-a-func-to-fulfill-a-policy

Net Coreには、同じAuthorizationRequirementタイプを持つAuthorizationHandlerを複数持つオプションがあります。これらのいずれか1つだけが承認に合格する必要があります https://docs.Microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.1#why-would-i- want-multiple-handlers-for-a-requirement

4
Homulvas