对于权限控制,微软已经提供了非常成熟的架构模型,并且网上讲解的方案也比较多,这里就不会累赘谈这些解决方案。
如果比如Q空间,公开访问,输入密码,还是允许特定一些身份的人进行访问,可以实现:
1>Global.asax HttpAplication.AuthorizeRequest 事件
2>可以重写MVC中的AuthorizeAttibute(ActionFilter)等
那么如果这样实现,必须要特定的过滤原则(那些页面需要这样实现)以及过滤规则绑定的实现方法。
对于可能出现不同访问规则的验证,这里是在具体的页面初始化过程中进行验证的,比如WebForm的Init 事件和MVC具体的Action进行验证,验证未通过之后状态如何处理?
一、直接输出状态,结束访问:
1 Response.StatusCode = 401; 2 Response.End();
其实这是很不错的方法,但是如果从维护性、拓展性考虑,不建议这么使用。
二、跳转到未授权页面:
1 Response.Redirect(UnAuthorizePage)
这种跳转显得很司空见惯,我常常见到动不动就是跳转,甚至多次见到跳转进入死循环。
三、状态异常HttpException
1 throw new HttpException(401, "UnAuthorize");
在Application_Error()方法或MVC ActionFilterAttibute OnException()中捕获异常,并处理:
1 HttpContext context = httpApplication.Context; 2 if (context == null || context.SkipAuthorization) 3 { 4 return; 5 } 6 HttpRequest request = context.Request; 7 HttpResponse response = context.Response; 8 response.StatusCode = httpException.GetHttpCode(); 9 response.Write(httpException.GetHtmlErrorMessage()); 10 httpApplication.CompleteRequest();
这样处理有什么好处?
如果有需要可以统一对这些数据进行分析,也可以此应用中做一些其他的处理,比如三次验证失败,不让再登陆了(锁定状态)。当然这需要更多的代码和更复杂体系结构。
HttpException异常,其他的一些状态也非常适用。