2015-01-06 164 views
1

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

如:

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

} 

如果用户访问SectionOne或SectionTwo与所需PermissionLevel那么他们应该被允许

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

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

有没有人有任何建议?

回答

0

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

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

用法:

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

它可以与默认授权属性做'[授权(角色=“成员,管理员”) ]' –

+0

肯定,但可能他需要在属性内部实现他自己的逻辑 –

2

,因为他们需要一起成对我不能同时权限集传递给一个属性。

是的,你可以。

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

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

这将通过许可对象,然后你就可以在你的方法与逻辑或评估的数组。

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

你甚至可以得到看中,并添加讲述了一个参数是否和或或他们...