web-dev-qa-db-fra.com

ASP.NET 5 Autorisation contre deux ou plusieurs stratégies

Est-il possible d'appliquer une autorisation à deux politiques ou plus? J'utilise ASP.NET 5, rc1.

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

Sinon, comment puis-je y parvenir sans utiliser de politiques? Deux groupes d'utilisateurs peuvent accéder à ce contrôleur: "Complet" et "Limité". Les utilisateurs peuvent appartenir à "Full" ou "Limited", ou aux deux. Ils ont seulement besoin d'appartenir à l'un des deux groupes pour accéder à ce contrôleur.

27
painiyff

Pas comme vous le souhaitez; les politiques sont conçues pour être cumulatives. Par exemple, si vous utilisez deux attributs distincts, ils doivent tous deux réussir.

Vous devez évaluer les conditions OR au sein d'une même politique. Mais vous n'avez pas à la coder en tant que OU dans un seul gestionnaire. Vous pouvez avoir une exigence qui a plus d'un gestionnaire. Si l'un des gestionnaires marque le succès, alors l'exigence est remplie. Voir l'étape 6 dans mon Atelier d'autorisation .

28
blowdart

Une fois la nouvelle stratégie "LimitedOrFull" configurée (en supposant qu'ils correspondent aux noms des types de revendications), créez une exigence comme celle-ci:

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

11

Net Core a une option pour avoir plusieurs AuthorizationHandlers qui ont le même type AuthorizationRequirement. Un seul d'entre eux doit réussir à passer l'autorisation https://docs.Microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.1#why-would-i- want-multiple-handlers-for-a-requirements

4
Homulvas