Generi c Атрибут авторизации для нескольких ролей ASP. NET Core - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь реализовать общий c атрибут множественного авторизации, который понимает, что каждый метод авторизован ролью, в которой я указываю роль ИЛИ с именем «SysAdmin», которая будет во всех методах, Пример:

[Authorize(Roles = "Role_A,SysAdmin")]
public Method1
{
   //actions
}

[Authorize(Roles = "Role_B,SysAdmin")]
public Method2
{
   //actions
}

[Authorize(Roles = "Role_C,SysAdmin")]
public Method3
{
   //actions
}

Я думаю, что повторять SysAdmin во всех методах - не лучшая идея, есть ли какое-нибудь решение, чтобы передать его generi c?

1 Ответ

0 голосов
/ 05 мая 2020

Поскольку вам всегда нужно проверять роль SysAdmin, мы можем сохранить ее как константу внутри атрибута.

[AuthorizeUser(Role = "Role_A")]
public Method1
{
   //actions
}
using System.Linq;

public class AuthorizeUserAttribute : AuthorizeAttribute
{   
    public string Role{ get; set; }
    private readonly string SysAdmin = "SysAdmin"; 

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);
        if (!isAuthorized)
        {                
            return false;
        }

        // method to get roles array by user name from db or claims
        string roles = GetUserRoles(httpContext.User.Identity.Name.ToString()); 

        var splittedRoles = Role.split(",");
        return roles.Any(x => splittedRoles.Any(y => y == x || y == SysAdmin))      
    }
}

Переопределите следующий метод, чтобы вернуть неавторизованных пользователей

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...