Remplacer le filtre d'autorisation global dans ASP.NET Core MVC 1.0

Je suis en train de mettre en place une autorisation de ASP.NET Core 1.0 MVC (6) web app.

Approche plus restrictive, par défaut, je veux restreindre tous les contrôleurs et les méthodes d'action pour les utilisateurs avec Admin rôle. Donc, je suis à l'ajout d'un mondial autoriser attribut comme:

AuthorizationPolicy requireAdminRole = new AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()
    .RequireRole("Admin")
    .Build();
services.AddMvc(options => { options.Filters.Add(new AuthorizeFilter(requireAdminRole));});

Alors je veux permettre aux utilisateurs avec des rôles spécifiques à l'accès en béton contrôleurs. Par exemple:

[Authorize(Roles="Admin,UserManager")]
public class UserControler : Controller{}

Qui bien sûr ne fonctionne pas, comme le "global filtre" ne permettra pas à la UserManager pour accéder au contrôleur comme ils ne sont pas des "admins".

Dans MVC5, j'ai été en mesure de mettre en œuvre ce par la création d'une coutume autoriser attribut et en mettant ma logique. Ensuite, à l'aide de cet attribut personnalisé mondial. Par exemple:

public class IsAdminOrAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        ActionDescriptor action = filterContext.ActionDescriptor;
        if (action.IsDefined(typeof(AuthorizeAttribute), true) ||
            action.ControllerDescriptor.IsDefined(typeof(AuthorizeAttribute), true))
        {
            return;
        }

        base.OnAuthorization(filterContext);
    }
}

J'ai essayé de créer un personnalisé AuthorizeFiltermais sans succès. API semble être différent.

Donc ma question est: Est-il possible de mettre en place la stratégie par défaut et ensuite le remplacer par des contrôleurs spécifiques et des actions. Ou quelque chose de similaire.
Je ne veux pas aller avec cette

[Authorize(Roles="Admin,[OtherRoles]")]

sur chaque contrôleur/action, car c'est un problème de sécurité potentiel. Ce qui va se passer si j'ai accidentellement oubliez pas de mettre le Admin rôle.

source d'informationauteur regnauld