【发布时间】:2013-01-17 15:22:12
【问题描述】:
我正在尝试为我的ASP.NET MVC4 web application 构建一个动态菜单。在构建菜单时,我想确保用户不应访问的菜单项不会显示在菜单中。
我正在使用表单身份验证和[Authorize] 属性,每个页面都需要一个给定的角色。
给定两个字符串 (Controller and Action) 和一个登录用户,我如何确定用户是否有权访问该控制器操作?
我所有的菜单数据都存储在数据库中。我渲染菜单的计划是构建菜单数据的 JSON 对象并将其嵌入到视图中。然后客户端我将使用Handlebars.js 并将菜单JSON object 插入模板。
我要做的是在呈现菜单数据时检查用户对给定控制器/操作的权限。我最初的想法是使用反射并查找控制器操作方法并检查是否存在 Authorize 属性并检查当前登录的用户是否具有访问该页面的必要角色。如果不是,则不会呈现菜单项。
我总是不愿意使用reflection,但是,通常有一种更简单的处理方式。
【问题讨论】:
-
如何渲染菜单?它是视图的一部分,还是您有某种子视图,例如 RenderControl 或 RenderAction 方法?此外,您似乎在问两个问题。您想基于安全性隐藏/显示菜单项,还是您已经弄清楚了那部分?
-
对于隐藏/显示菜单项,这里可能有一些帮助:stackoverflow.com/questions/8411224/…
-
您必须建立您的声明并检查用户是否拥有声明。实现安全性的最佳方式不是基于角色(不过对菜单很有用),而是基于操作的安全性。
-
可以使用 MvcSiteMapProvider 生成菜单。
标签: c# asp.net asp.net-mvc-4 asp.net-membership