在我的ASP.NET MVC 3应用程序中,我有两种类型的用户 - 常规用户和管理员用户。显然,后者拥有比前者更大的特权。我有一个页面级授权实现,但对于屏幕级项目(如果管理员显示此按钮等)我想知道什么是最合适的解决方案,使所有屏幕上都可以使用布尔IsAdmin标志。我可以想到一堆不同的方法cookie / session variables / httpcontext,但我想知道在生产中成功使用了什么。任何指导表示赞赏
提前致谢
JP
答案 0 :(得分:5)
http://msdn.microsoft.com/en-us/library/system.web.httpcontext.user.aspx
HttpContext.User
的类型为IPrincipal
,其中有一种方法IsInRole
。如果您使用FormsAuthentication
,您将免费获得此信息。 HttpContext.User
将直接在任何视图中提供
答案 1 :(得分:0)
ViewBag看起来很容易。
ViewBag.UserIsAdmin = somevalue;
可用于每个视图,并且用于查看不属于模型的数据。
唯一的缺点是你需要在需要它的视图上填充每个请求,但如果它是全局的话,你可以在Base控制器的初始化方法中实现它。
至于如何在请求之间存储它,而不是cookie。那些很容易被原谅。您可以使用会话在请求之间存储它,或者如果它是基本控制器中的快速请求(并且您不能使用会话),则可以在每个请求中重新填充它。
答案 2 :(得分:0)
不要使用Session,因为你必须检查它是否超时。在许多地方很难编码(我的经验)。
您可以使用ASP.NET成员资格利用的表单身份验证。然后,您可以安全地使用HttpContext.User.Identity来检查用户权限