从数据库授权属性角色

时间:2018-10-04 15:36:48

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

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

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

3 个答案:

答案 0 :(得分:0)

没有任何超级简单的方法可以做到这一点。您可以将<div class="col-lg-6 col-sm-12 right"> <% @non_availabilities = NonAvailability.all %> <table class="table table-striped table-bordered table-hover"> <thead> <tr> <th class="col-md-2">Employee</th> <th class="col-md-2">Date</th> <th class="col-md-2">Time</th> <th class="col-md-2">Reason</th> </tr> </thead> <tbody> <% @non_availabilities.each do |non_availability| %> <tr> <td class="col-md-2"><%= non_availability.employee.full_name %></td> <td class="col-md-2"><%= non_availability.date %></td> <td class="col-md-2"><%= non_availability.time %></td> <td class="col-md-2"><%= non_availability.reason %></td></tr> <% end %> </tbody> </table> </div> 属性应用于控制器而不是操作,但是它仍然是对其进行“硬编码”。

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

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

答案 1 :(得分:0)

创建Action 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 
 }

答案 2 :(得分:0)

您可以尝试这种方式

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


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

 }