Asp.net mvc MVC顺序、优先级和功能问题中的授权属性
有些角色我没有完全理解。使用Asp.net mvc MVC顺序、优先级和功能问题中的授权属性,asp.net-mvc,authorization,roles,Asp.net Mvc,Authorization,Roles,有些角色我没有完全理解。使用[Authorize]属性 当控制器和操作上有[Authorize]属性时: 当一个角色同时处于这两个角色中时,该角色将具有访问权限 如果角色仅在控制器上定义,而未在操作上定义,则无法访问 如果角色仅在操作中定义,而未在控制器中定义,则无法访问 我明白了,这是合乎逻辑的。在运行操作之前,您需要访问控制器 我不明白的是为什么这不起作用: [Authorize(Roles = "Algemeen Beheer, Admin, Coordinator, Secretaria
[Authorize]
属性
当控制器和操作上有[Authorize]
属性时:
[Authorize(Roles = "Algemeen Beheer, Admin, Coordinator, Secretariaat")]
public class FacturatieGegevensController : Controller {
[Authorize(Users = "Stefan.coordinator", Roles = "Algemeen Beheer, Admin")]
public ActionResult Create(int instID) {
return View();
}
}
当我以用户Stefan.coordinator
身份登录时,我可以访问控制器,但无法访问创建操作。
我认为这将是
用户
和角色
之间的OR关系。不是吗?如何使其工作?在控制器级别指定的[Authorize]
是默认值,在没有为单个操作方法指定[Authorize]
时使用
这两种方法不能协同工作,只有一种方法会被执行
如果在[Authorize]
筛选器中同时指定用户和角色,则必须满足这两个条件才能允许访问该方法
因此它是一个ANDnot OR。访问Create方法的条件是: ((在{Algemeen Beheer,管理员, 协调人、秘书处(}))[来自主计长级别]和 ({Stefan.coordinator}中的用户)和 (在{Algemeen Beheer,Admin}中的角色)[从方法级别] 一旦完成所有AND/OR,结果就是: {Stefan.coordinator}中的用户和{Algemeen Beheer,Admin}中的角色 也就是说,在一个特定的属性中,用户和角色被合并在一起。在多个属性之间,条件被合并在一起 考虑这一点的最佳方式是,[Authorize]属性彼此不知道,因此每个属性都独立执行。首先是控制器级别1,然后是方法级别1。要访问该方法,您需要通过所有门 编辑-有一个关于逻辑如何像上面那样工作的问题 让我们: 由于控制器级别的[Authorize]属性是(A | B | C | D),方法级别的[Authorize]属性是(E&&(A | B)),多个[Authorize]属性由一个逻辑and表示,该逻辑最终为(A | B | C | D)&(E&&(A | B)),这将简化为E&(A | B),需要命名用户“Stefan.coordinator”和“Algemeen Beheer”或“Admin”角色。由于用户Stefan.coordinator不是这两个角色中的任何一个,因此检查失败 解决您的特定问题。
如果您想将自己的逻辑应用于[Authorize]属性检查,请将AuthorizeAttribute子类化并重写AuthorizeCore方法。这样您可以说如果(User==“Stefan.coordinator”| base.AuthorizeCore(…){…})。也许我没有遵循您的逻辑,为什么
((User in{Stefan.coordinator})
被淘汰?@Nathan-我已经发布了一个澄清。请让我知道这是否回答了您的问题!您的等式中有一个错误。它似乎是({Stefan.coordinator}中的用户)和({Algemeen Beheer,Admin}中的角色))[从方法级别]因为没有其他用户可以在有此用户tagBah的情况下访问该操作,所以不敢相信我忘记了该代码是如何工作的。---更新答案。[编辑以前的注释]这是不正确的。所有[Authorize]属性(控制器和方法)都被执行。
A = ROLE is "Algemeen Beheer"
B = ROLE is "Admin"
C = ROLE is "Coordinator"
D = ROLE is "Secretariaat"
E = USER is "Stefan.coordinator"