我正在寻找有关如何在操作上拥有多个授权属性的建议。
例如:
[AuthorizePermission(PermissionName.SectionOne, PermissionLevel.Two)]
[AuthorizePermission(PermissionName.SectionTwo, PermissionLevel.Three)]
public ActionResult Index(int userId = 0){
}
如果用户可以使用所需的PermissionLevel访问SectionOne OR SectionTwo,则应允许他们进入。
我面临的问题是如何在决定不允许之前检查这两个属性(因为它们是单独的属性)?如果第一个失败那么它将永远不会到达第二个。
我无法将两个权限集都传递给一个属性,因为它们需要配对在一起。
有人有任何建议吗?
答案 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")]