asp.net-mvc – ASP.NET MVC授权和使用模型类的权限
这是我在这里发表的第一篇文章,你好:)好的,让我们谈谈……
我在ASP.NET MVC框架中编写我的第一个应用程序,我在检查使用模型类实例(读取,编辑)的权限时遇到问题.示例代码如下所示: // Controller action [CustomAuthorize(Roles="Editor,Admin")] public ActionResult Stats(int id) { User user = userRepository.GetUser(id); if (user == null || !user.Activated || user.Removed) return View("NotFound"); else if (!user.IsCurrentSessionUserOwned) return View("NotAuthorized"); return View(user); } 到目前为止授权属性只保护控制器动作,所以我的问题是:如何使CustomAuthorize属性不仅检查用户角色,用户名,还要检查在动作方法中实例化的资源(上图:用户类,但还有其他ORM LINQ2SQL类新闻,照片等)所有这些要检查的对象都有自己的唯一ID,因此用户实体拥有自己的ID,新闻将其ID和UserID字段引用到Users表.我该如何解决这个问题? 解决方法
如果我理解正确,你想让写新闻,文章的用户编辑他自己的新闻或文章,即使他没有“管理员”或“编辑”的角色.
那是一个棘手的问题,简单的解决方案是: 让你的CustomAuthorize原样,但让它继续Action,而不是返回错误View或者只是注入一个动作参数,即: CustomAuthorize: //..Your Role Validation Logic Here... if (filterContext.ActionParameters.Keys.Contains("isAuthorize")) { filterContext.ActionParameters.Remove("isAuthorize"); } filterContext.ActionParameters.Add("isAuthorize",isAuthorized); WhereAuthorized将保存角色验证逻辑的结果. 所以在你的控制器中,你必须添加第二个参数: [CustomAuthorize(Roles="Editor,Admin")] public ActionResult Stats(int id,bool isAuthorized) { User user = userRepository.GetUser(id); if (user == null || !user.Activated || user.Removed) return View("NotFound"); else if (user.Id != CurrentUser.Id && !isAuthorized) //not Authorized by roles //not the owner get away from here =D return View("NotAuthorized"); return View(user); } 我假设您可以访问来自BaseController(abstrac类)中的属性的CurrentUser. 实施比这更精细的事情将导致复杂的情况. 例如,您可以,但不建议: A.将所有者的userID作为参数发送(因此,每次在URL GET或POST请求上发送ID时,都必须添加所有者的用户ID作为参数).但这可能会导致非常丑陋的安全漏洞,因为您依赖于可能被用户和woala篡改的线路发送的用户ID!我现在授权. B.尝试在动作过滤器中实例化对象(但是你必须首先找出你想要实例的实体,这可能会导致一个长的switch语句和CustomAuthorize中的第三个参数,所以你知道从哪个实体获取D B). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – MVC帖子没有填充模型
- asp.net-mvc-3 – 将输入值传递给Action(ASP.Net MVC 3)
- ASP.NET – 图像未显示
- 如何从ASP.NET Web API返回已排序的字典
- 无法启动任何ASP.NET项目
- asp.net-mvc – MVC 3 RTM allowHtml在使用FormCollection时
- 事件(Event),绝大多数内存泄漏(Memory Leak)的元凶[上篇
- asp.net * WebForms *开发人员将来可以期待什么?
- asp.net-mvc-3 – MVC 3传递实体作为接口
- asp.net-mvc – xVal和ASP.Net MVC 2 AddModelStateErrors问
- asp.net-mvc-5 – Windows身份验证在ASP.NET MVC
- asp.net-identity – ASP.net身份 – UserManage
- asp.net – 默认情况下提供静态文件index.html
- asp.net – 如何为Katana/Owin自主托管应用程序设
- asp.net-mvc-3 – 向@ Html.ValidationSummary添
- .net – 如何跟踪和消除会话滥用?
- asp.net-mvc – 单元测试Url.Action(使用Rhino M
- asp.net-mvc – 在ASP.NET MVC中保护NullReferen
- asp.net – HTTP错误403 – 禁止
- asp.net – 下拉列表中的第一个项目为空白