2009-09-29 175 views
1

我知道我可以通过应用[Authorize]属性来阻止未经身份验证的用户访问控制器级别的视图,并且还可以使用此功能将视图过滤到单个用户或角色。然而,我的问题是关于做相反的...有没有办法从特定的视图中拒绝认证的用户,而不必手动添加检查,看看他们是否在控制器代码的开始行中进行身份验证?如果存在这样的情况,理想情况下是[未经授权]属性或等效属性?ASP.NET MVC 1.0身份验证

原因是我不希望验证用户能够访问我正在工作的网站的帐户创建页面以及其他资源。我意识到我可以明确地在控制器中检查它们,但我更愿意尽可能地装饰控制器方法。

谢谢:)

回答

0

您可以编写自己的授权过滤器。从FilterAttribute继承并实现IAuthorizationFilter。将其称为UnauthorizedAttibute,您将可以像[Authorize]一样使用它。

听见您可以阅读有关过滤器:

http://www.asp.net/LEARN/mvc/tutorial-14-cs.aspx

+0

我已经完成了这个:)非常感谢。 – 2009-09-29 15:28:15

0

一个简单的方法来实现这一点?只需将动作保留为untagged,然后开始:

If(Request.IsAuthenticated) 
    // redirect somewhere, or return another view... 
+0

感谢您的回应。我考虑过这样做,但选择遵循上面的LukLed的建议。 – 2009-09-29 15:29:06

2

这是一起什么LukLed线指的是:

public class UnAuthorizedAttribute : AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     bool excludeCondition = false; 

     if (excludeCondition) 
      filterContext.Result = new HttpUnauthorizedResult(); 
     else 
      base.OnAuthorization(filterContext); 
    } 


} 

简单地说在逻辑您excludeCondition。你也可以选择做一些事情,比如重定向到其他视图。只需用[未经授权]

+0

非常感谢。我会把它作为我接受的答案,但对LukLed来说这似乎很粗鲁。我很欣赏代码示例:) – 2009-09-29 15:39:04

0

将代码标记出来,如果您已经在使用角色提供者,也可以简单地完成这项工作。那么你的行为只需要按适当的角色过滤:

[Authorize(Roles = "Admin, Editor")]