我一直在努力思考这个问题,并且找不到如何正确解决这个问题的好方法。
我已阅读过这些文章:
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?
思考也许最后一个很接近。
的方案:
所以在控制器中我怎么能说用户有权访问某个动作,因为我不知道用户管理员创建了哪些角色?
所以在逻辑中...假设我有一个带有“创建”,“详细信息”的任务控制器。该任务有一个“服装”部门。
管理员会添加一个名为“任务用户”的新角色,并说这个角色可以“创建任务”
管理员还允许此角色“查看任务详细信息”
管理员将打开“部门级别安全”
的创建
当在控制器上调用Task Create时,我需要确保用户处于允许“Create Task”的角色中。因此,默认情况下,我无法将允许的“角色”发送到授权属性,因为我不知道它们。我不知何故需要发送用户拥有的所有角色,看看角色是否有权访问“创建任务”
使用部门安全性查看:
当另一个用户去查看此任务时,他们可以访问“查看任务详细信息”(我可以弄清楚但是我解决了第一个问题)。但是,由于任务是针对他们所在的其他部门,我需要拒绝访问。如果任务是用户所在部门之一,则用户只能“查看任务详细信息”。
这是我无法弄清楚的。如何正确扩展AuthorizeAttribute以便我可以通过GerRolesForUser发送角色列表,因为它只接受一个字符串,以及如何识别它的操作,然后通过检查部门ID来限制另一个级别的安全性。
部门ID不一定要被缓存,所以我可以在控制器级别这样做。
答案 0 :(得分:1)
我有一些类似的问题,我没有使用授权属性。
相反,我决定扩展Controller
类并覆盖OnActionExecuting
的实现。在我的实现中,我可以执行所有检查,例如哪个部门用户属于哪个,以及他是否足够好以查看其他部门的数据。看看这种方法是否适合您。
答案 1 :(得分:1)
我有一些类似的问题,我没有使用授权属性。
相反,我决定为不同的用户采用不同的-2布局。
如果用户是管理员,那么他将转到不同的视图,如果用户是访客,他将通过不同的布局转到不同的视图。