【发布时间】:2012-04-20 13:48:29
【问题描述】:
我在我的 MVC3 应用程序中使用从 AuthorizeAttribute 派生的类进行全局授权。我通过filters.Add(new CtsAuthorizeAttribute());将它用作全局过滤器
现在我已经实现了一个自定义角色提供程序,并希望开始在控制器上放置更具体的授权过滤器,如下所示:
[CtsAuthorize(Roles = "systemadmin")]
public class CompanyController : CtsController
我想针对基于角色的授权失败重定向到消息页面(理想情况下只是修改失败页面的模型属性),但保留默认重定向到登录页面以针对基于登录的失败。如何在下面的覆盖中确定授权失败的原因?
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
}
我可以复制“角色中的用户”检查,但它只是由这个过滤器执行的。我只是不知道如何从过滤器中学习这一点。
【问题讨论】:
-
您认为什么是“授权失败”?您是否将身份验证失败与此分组?
-
@JeremyHolovacs,使用全局过滤器 as,失败是请求未通过身份验证,并且当我使用
Roles应用过滤器时,用户不在指定的角色中。跨度> -
MS 安全框架中的一个失败,因为没有区分身份验证和授权,这是非常不同的事情。我认为简短的回答是,检查用户是否经过身份验证(这应该可以通过上下文获得),然后检查角色。这是您正在寻找的粒度级别吗?
-
@JeremyHolovacs 是的,谢谢,在这种情况下,我可以安全地假设如果用户通过了身份验证,他们就没有被授权。为什么没有回答这个建议?我不知道这种情况是否是 MS 故障。此属性仅检查授权,是技术性的,在基本情况下,仅授权经过身份验证的用户。
-
我不确定我是否理解您的评论。我给你提供了你正在寻找的信息吗?