jda*_*vis 9 c# asp.net asp.net-membership asp.net-mvc-4
我正在尝试为我建立一个动态菜单ASP.NET MVC4 web application.当我构建菜单时,我想确保用户不应该访问的菜单项不会显示在菜单中.
我正在使用表单身份验证和[Authorize]每个页面需要给定角色的属性.
给定两个字符串(Controller and Action)和一个登录用户,如何确定用户是否可以访问该控制器操作?
我的所有菜单数据都存储在数据库中.我渲染菜单的计划是构造菜单数据的JSON对象并将其嵌入到View中.然后客户端我将使用Handlebars.js菜单JSON object并将其插入模板.
我正在尝试检查用户的给定Controller/Action的权限,因为我正在渲染菜单数据.我最初的想法是使用反射并查找控制器操作方法并检查是否存在Authorize属性,并检查当前登录用户是否具有访问该页面的必要角色.如果不是,则不会呈现菜单项.
我总是不愿意使用reflection,通常往往会有一种更简单的做事方式.
Tig*_*ies -1
您可以使用 Authorize 属性来装饰控制器中的操作[Authorize(AuthorizationContext)],也可以扩展 Authorize 属性以进行自定义授权;
您还可以在字典中定义一些约定,在其中定义控制器的创建操作也需要创建类型授权
Dictionary<string, Right> actionConventions = new Dictionary<string, Right>
{
{ "Index", Right.View },
{ "List", Right.View },
{ "Open", Right.View },
{ "Create", Right.Create},
{ "Edit", Right.Edit },
{ "Delete", Right.Delete }
}
Run Code Online (Sandbox Code Playgroud)
和 的覆盖OnAuthorization和Authorize方法AuthorizeAttribute,如果操作遵循字典中定义的约定,则检查约定,或者检查操作Authorize(AuthorizationContext)或 的特定条件HandleUnauthorizedRequest(AuthorizationContext)。
处理菜单,您可以创建一个授权服务,在其中返回当前用户的权限并添加一个包含用户权限的类,并且在渲染模型时检查模型是否应该渲染菜单项。
| 归档时间: |
|
| 查看次数: |
2517 次 |
| 最近记录: |