我一直在努力思考这个答案,但找不到如何正确执行此操作的好解决方案。
我读过这些文章:
http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/ http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/
http://geekswithblogs.net/brians/archive/2010/07/08/implementing-a-custom-asp.net-mvc-authorization-filter.aspx http://geekswithblogs.net/brians/archive/2010/07/08/implementing-a-custom-asp.net-mvc-authorization-filter.aspx
ASP.NET MVC 自定义授权 https://stackoverflow.com/questions/1419196/asp-net-mvc-custom-authorization
http://davidhayden.com/blog/dave/archive/2009/04/09/CustomAuthorizationASPNETMVCFrameworkAuthorizeAttribute.aspx http://davidhayden.com/blog/dave/archive/2009/04/09/CustomAuthorizationASPNETMVCFrameworkAuthorizeAttribute.aspx
自定义授权属性附加参数? https://stackoverflow.com/questions/1450227/custom-authorize-attribute-additional-param
想着也许最后一个已经很接近了。
设想:
- 用户创建角色
- 用户可以分配角色有权执行的操作。
- 用户将用户添加到这些角色
- 用户也是部门的一部分。
那么在控制器中,我怎么能说用户有权访问某个操作,因为我不知道用户管理员创建的角色是什么?
所以在逻辑上......假设我有一个带有“创建”、“详细信息”的任务控制器。该任务有一个“服装”部门。
- Task:
-- 任务ID
-- 任务标题
-- 任务部门ID
- -- User:
- 用户名
-- 角色
-- 部门
我会以某种方式将“创建”操作与“创建任务”能力联系起来
我会以某种方式将“详细信息”操作与“查看任务详细信息”功能相关联
管理员将添加一个名为“任务用户”的新角色,并表示该角色可以“创建任务”
管理员还允许该角色“查看任务详细信息”
管理员将打开“部门级安全”
创建:
当在控制器上调用任务创建时,我需要确保用户处于允许“创建任务”的角色中。因此,默认情况下,我无法将允许的“角色”发送到授权属性中,因为我不知道它们。我以某种方式需要发送用户拥有的所有角色,并查看角色是否有权访问“创建任务”
与部门保安一起查看:
当另一个用户查看此任务时,他们可能有权访问“查看任务详细信息”(我可以弄清楚如何解决第一个问题)。但是,由于该任务是针对他们所在部门以外的另一部门的,因此我需要拒绝访问。仅当任务属于用户所在部门之一时,用户才能“查看任务详细信息”。
这是我想不通的。如何正确扩展 AuthorizeAttribute,以便我可以通过 GerRolesForUser 发送角色列表,因为它只接受字符串,以及如何识别它的操作,然后通过检查部门 ID 在另一个级别限制安全性。
部门 ID 不一定需要缓存,所以也许我可以在控制器级别执行此操作。
我有一些类似的问题,但我没有使用 Authorize 属性。
相反,我决定延长Controller
类并覆盖其实现OnActionExecuting
。在我的实现中,我可以执行所有检查,例如用户属于哪个部门以及他是否足以查看其他部门的数据。看看这个方法是否适合你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)