2016-07-17 114 views
0

我在我的数据库中创建了自己的自定义角色表,并且我还想创建一个自定义授权属性。MVC自定义授权数据库属性

这里是我到目前为止,但我真的不知道如何着手:

private List<RoleModel> Roles; 
    private IRoleRepository repo; 
    private ICustomerRepository cust; 


    public bool CheckRoles(string UserId) 
    { 
     try 
     { 
      Roles = repo.GetAll().ToList(); 
      CustomerModel Customer = cust.Get(UserId); 
      int CustomerRole = Customer.RoleId; 
      RoleModel role = Roles.First(x => x.id == CustomerRole); 


     } 
     catch(Exception e) 
     { 
      return false; 
     } 
    } 

    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     base.OnAuthorization(filterContext); 
     string UserId = filterContext.HttpContext.User.Identity.GetUserId(); 



    } 

如果有人可以帮助我完成这一点,我将不胜感激。

谢谢!

+1

哪一部分你被卡住,你能详细点吗? –

回答

0

我认为创建一个自定义的AuthorizeAttribute不是一个好主意。使用标准的AuthorizeAttribute是一个好习惯。

这是一个常见的情况有自己的角色表。重写如何设置主体标识的角色并使用AuthorizeAttribute的Roles属性更好。在用户登录时将角色设置为一次索赔;它会比在每个请求的自定义授权属性中从数据库检索角色要好。 设置你的要求CalimTypes.Role,然后保护您的控制器/行动有:

[Authorize(Roles = "admin")] 
+0

我制作我自己的角色表的原因是因为您必须购买角色,因此每个角色都有一个价格列,而且默认情况下没有。然而,你认为给我的角色表一个ASPRoleId的外键并且以这种方式链接到它是一个好习惯吗? – DevShadow