【问题标题】:Authorize attribute Roles from Database从数据库授权属性角色
【发布时间】:2018-10-04 15:36:48
【问题描述】:

我想从数据库中获取以下角色(管理员、IT、..),而不需要在操作结果之上进行硬编码。请提供任何帮助。

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

【问题讨论】:

    标签: c# asp.net-mvc authentication authorization roleprovider


    【解决方案1】:

    没有任何超级简单的方法可以做到这一点。您可以将[Authorize] 属性应用于控制器而不是操作,但它仍然是“硬编码”它。

    可以创建自定义授权属性 ([link])1,但您必须将路由值以及允许访问的角色存储在数据库中路线。然而,这只是将手动更改代码的负担转移到数据库中。

    我真的不认为这真的应该被视为“硬编码”,因为您必须在某处声明您的授权,并且您仍然可以在不同的环境中拥有具有不同权限的不同用户。除了开发人员之外,还有谁应该最清楚哪些路线需要哪些授权?您是否想因为您在某处更改了路由而中断访问控制?

    【讨论】:

      【解决方案2】:

      创建一个动作定位器

          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 
       }
      

      【讨论】:

        【解决方案3】:

        你可以试试这个方法

          public static Role {
            public static string Admin ="Admin";
            public static string IT ="IT";
          }
        
        
         [Authorize(Roles = Role.Admin,Role.IT)]
         public ActionResult Index()
         {
        
         }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-03
          • 2013-12-03
          • 2012-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多