自定义授权属性MVC

时间:2015-01-06 01:48:28

标签: asp.net-mvc custom-attributes

我正在寻找有关如何在操作上拥有多个授权属性的建议。

例如:

[AuthorizePermission(PermissionName.SectionOne, PermissionLevel.Two)]
[AuthorizePermission(PermissionName.SectionTwo, PermissionLevel.Three)]
public ActionResult Index(int userId = 0){

}

如果用户可以使用所需的PermissionLevel访问SectionOne OR SectionTwo,则应允许他们进入。

我面临的问题是如何在决定不允许之前检查这两个属性(因为它们是单独的属性)?如果第一个失败那么它将永远不会到达第二个。

我无法将两个权限集都传递给一个属性,因为它们需要配对在一起。

有人有任何建议吗?

2 个答案:

答案 0 :(得分:2)

  

我无法将两个权限集都传递给一个属性,因为它们需要配对在一起。

是的,你可以。

没有理由不能在单个属性中包含所有权限。像这样:

[AuthorizePermission(new Permission[]{
   new Permission(PermissionName.SectionOne, PermissionLevel.Two), 
   new Permission(PermissionName.SectionTwo, PermissionLevel.Three)}]

这将传递一个Permission对象数组,然后您可以使用OR逻辑在方法中对其进行评估。

public class AuthorizePermissionAttribute : AuthorizeAttribute
{
    private Permission[] _permissions = null;
    public AuthorizePermissionAttribute(Permission[] permissions)
    {
        _permissions = permissions;
    }
}

你甚至可以得到想象力,并添加一个参数,告诉他们是否要AND或OR ...

答案 1 :(得分:0)

我知道的唯一方法就是这样

 public class CustomRolesAttribute : AuthorizeAttribute
  {
     public CustomRolesAttribute(params string[] roles)
     {
       Roles = String.Join(",", roles);
     }
  }

用法:

[CustomRoles("members", "admin")]