我已经阅读了这些文章:
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
ASP.NET MVC custom authorization
http://davidhayden.com/blog/dave/archive/2009/04/09/CustomAuthorizationASPNETMVCFrameworkAuthorizeAttribute.aspx
Custom Authorize Attribute additional Param?
想想也许最后一个是接近的.
场景:
>用户创建角色
>用户可以指定角色具有的访问权限.
>用户将用户添加到这些角色
>用户也是部门的一部分.
所以在控制器中我怎么说一个用户可以访问一个动作,因为我不知道用户管理员创建的角色是什么?
所以在逻辑…让我们说我有一个任务控制器与“创建”,“细节”.该任务有一个“服装”系.
>任务:
– TaskID
– TaskTitle
– TaskDepartmentID
我将以某种方式将“创建”动作与“创建任务”功能相关联
我将以某种方式将“详细信息”操作与“查看任务详细信息”功能相关联
管理员将添加一个名为“任务用户”的新角色,并说这个角色可以“创建任务”
管理员还将允许此角色“查看任务详细信息”
管理员将打开“部门级安全性”
创建:
当在控制器上调用任务创建时,我需要确保用户在允许“创建任务”的角色中.所以默认情况下,我不能发送允许进入授权属性的“角色”,因为我不知道它们.我以某种方式需要发送用户拥有的所有角色,并查看角色是否可以访问“创建任务”
用部门安全查看:
当另一个用户去查看这个任务时,他们可以访问“查看任务详细信息”(我可以弄清楚我解决了第一个问题).但是,由于该任务是另一个部门,而是他们所在的其他部门,我需要拒绝访问.如果任务是用户所在部门的一部分,用户只能查看任务详细信息.
这是我无法想象的.如何正确扩展AuthorizeAttribute,以便我可以通过GerRolesForUser发送角色列表,因为它只接受一个字符串,以及如何识别它的Action,然后通过检查部门ID来限制其他级别的安全性.
部门ID不一定必须被缓存,所以我可以在控制器级别做到这一点.