Авторизовать атрибут Роли из базы данных - PullRequest
0 голосов
/ 04 октября 2018

Я хочу получить указанные ниже роли (Admin, IT, ..) из базы данных без жесткого кодирования поверх результата действия.Пожалуйста, предоставьте любую помощь.

[Authorize(Roles = "Admin,IT")]
public ActionResult Index()
{
}

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

создать действие Finter

    public class ValidationPermission : ActionFilterAttribute
    {
     public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
         if(System.Web.HttpContext.Current.Session["UserName"] == null)
         System.Web.HttpContext.Current.Response.RedirectToRoute("Login");
         else{
         // code check CheckPermission
             }
        }
    }

контроллер действия

[ValidationPermission(Action = ActionEnum.Read, Module = CModule)]
public ActionResult Index()
 {
 // something code 
 }
0 голосов
/ 04 октября 2018

Вы можете попробовать таким образом

  public static Role {
    public static string Admin ="Admin";
    public static string IT ="IT";
  }


 [Authorize(Roles = Role.Admin,Role.IT)]
 public ActionResult Index()
 {

 }
0 голосов
/ 04 октября 2018

Нет супер-простых способов сделать это.Вы можете применить атрибут [Authorize] к контроллеру вместо действия, но он все еще «жестко кодирует» его.

Вы можете создать собственный атрибут авторизации ([ссылка]) 1 , но вам потребуется сохранить значения маршрутизации в базе данных, а также роли, которым был разрешен доступ к маршруту.Однако это просто переносит бремя внесения ручных изменений в базу данных из кода.

Я действительно не думаю, что это действительно следует рассматривать как «жесткое кодирование», поскольку вы должны где-то объявить свое разрешение , и у вас могут быть разные пользователи с разными разрешениями в разных средах.Кто, кроме разработчика, должен лучше знать, какие маршруты требуют какой авторизации?Хотели бы вы нарушить контроль доступа, потому что вы где-то изменили маршрутизацию?

...