asp.net-mvc – ASP.NET MVC 3自定义授权
发布时间:2020-12-16 04:18:51 所属栏目:asp.Net 来源:网络整理
导读:我正在编写一个ASP.NET MVC 3应用程序,我有很多角色: 系统管理员,客户管理员,预算所有者,应用所有者 我知道我可以使用[Authorize(Roles =“…”)]属性轻松限制对某些控制器(和操作方法)的访问. 但是,某些授权不仅仅基于角色,而是基于权限.例如,预算所有者应
我正在编写一个ASP.NET MVC 3应用程序,我有很多角色:
系统管理员,客户管理员,预算所有者,应用所有者 我知道我可以使用[Authorize(Roles =“…”)]属性轻松限制对某些控制器(和操作方法)的访问. 但是,某些授权不仅仅基于角色,而是基于权限.例如,预算所有者应该只能访问分配给其成本中心的预算 – 而不是其他人的预算. 目前我在action方法中有一些代码来检查: if(UserCapabilities.CanAccessBudget(budgetId)) { // get budget and show view } else { // redirect to index action } 这开始使我的代码变得混乱并使检查安全性变成一场噩梦 – 因为我有许多需要这些不同类型的授权检查的动作方法. 我有一个想法是编写一些自定义属性,我可以用它来装饰我的动作方法并清理我的代码: // // GET: /Budgets/View/1 [CanAccessBudget] public ActionResult View(int id) { //... } 人们怎么想?编写自定义属性是最干净,最易维护的方式吗? 解决方法
您可以编写自定义授权属性:
public class CanAccessBudgetAttribute : AuthorizeAttribute { protected override bool AuthorizeCore(HttpContextBase httpContext) { var isAuthorized = base.AuthorizeCore(httpContext); if (isAuthorized) { var request = httpContext.Request; var budgetId = request.RequestContext.RouteData.Values["budgetId"] ?? request["budgetId"]; var currentUser = httpContext.User.Identity.Name; return HasPermissionsForBudget(currentUser,budgetId); } return isAuthorized; } } 然后: [CanAccessBudget] public ActionResult View(int id) { //... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – MVC组件GUI方法
- asp.net-mvc-3 – MVC3将基类传递给局部视图 – 提交表单只
- 实体框架 – ASP.net身份,IoC和共享DbContext
- asp.net-core-mvc – 在第二级包含几个引用
- ASP.NET MVC下Ajax.BeginForm方式无刷新提交表单实例
- asp.net – 当用户有多个角色时,位置授权如何工作?
- asp.net – 混合Windows / Forms身份验证跨站点
- asp.net-mvc-3 – 如何在mvc3视图中的mvcgrid中多次添加同一
- asp.net-mvc – IIS7 ASP.NET MVC客户端缓存标头不起作用
- asp.net中XML如何做增删改查操作
推荐文章
站长推荐
- asp.net AJAX客户端调用服务器上的慢速异步进程的
- Asp.Net在Sql中选择
- asp.net – 如何配置IIS以便在连接到SQL Server时
- asp.net-mvc – CultureInfo:ASP.NET / MVC上的
- asp.net-mvc – IIS 7.5.无法禁用Url重写规则(我
- ASP.Net会员登录问题
- ASP.NET MVC 使用Spring.NET 依赖注入
- ASP.NET MVC全局授权过滤器强制登录AllowAnonymo
- ASP.NET MVC的Razor引擎:IoC在View激活过程中的
- 关于Type Initializer和 BeforeFieldInit的问题,
热点阅读