10

我一直在努力思考这个答案,但找不到一个很好的解决方案来正确地做到这一点。

我已经阅读了这些文章
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 自定义授权
http://davidhayden.com/blog/dave/archive/2009/04/09/CustomAuthorizationASPNETMVCFrameworkAuthorizeAttribute .aspx
自定义授权属性附加参数?

想也许最后一个很接近。


设想:

  • 用户创建角色
  • 用户可以分配角色有权执行的操作。
  • 用户将用户添加到这些角色
  • 用户也是部门的一部分。

那么在控制器中,我怎么能说用户可以访问操作,因为我不知道用户管理员创建的角色是什么?

所以在逻辑上......假设我有一个带有“创建”、“详细信息”的任务控制器。该任务有一个“服装”部门。

  • 任务:
    --TaskID
    --TaskTitle
    --TaskDepartmentID

  • -- 用户:
    -- 用户名
    -- 角色
    -- 部门

    我会以某种方式将“创建”操作与“创建任务”功能
    相关联 我会以某种方式将“详细信息”操作与“查看任务详细信息”功能相关联

管理员将添加一个名为“任务用户”的新角色,并说此角色可以“创建任务”
管理员还允许此角色“查看任务详细信息”
管理员将打开“部门级安全性”


创建:
任务创建时在控制器上调用我需要确保用户处于允许“创建任务”的角色中。因此,默认情况下,我无法将允许的“角色”发送到授权属性中,因为我不知道它们。我需要以某种方式发送用户拥有的所有角色,并查看角色是否有权

使用部门安全查看“创建任务”:
当另一个用户查看此任务时,他们可能有权访问“查看任务详细信息”(我可以弄清楚但我解决了第一个问题)。但是,由于任务是针对他们所在部门以外的另一个部门,我需要拒绝访问。如果任务是用户所在部门之一的一部分,则用户只能“查看任务详细信息”。

这是我无法弄清楚的。如何正确扩展 AuthorizeAttribute 以便我可以通过 GerRolesForUser 发送角色列表,因为它只接受一个字符串,以及如何识别它用于什么操作,然后通过检查部门 ID 在另一个级别上限制安全性。

部门 ID 不一定要被缓存,所以也许我可以在控制器级别做到这一点。

4

2 回答 2

1

我有一些类似的问题,我没有使用 Authorize 属性。

相反,我决定扩展Controller类并覆盖OnActionExecuting. 在我的实现中,我可以执行所有检查,例如用户属于哪个部门以及他是否足以查看其他部门的数据。看看这种方法是否适合你。

于 2011-02-26T03:00:47.097 回答
1

我有一些类似的问题,我没有使用 Authorize 属性。

相反,我决定为不同的用户采用不同的 -2 布局。

如果用户是管理员,那么他将进入不同的视图,如果用户是访客,他将通过不同的布局进入不同的视图。

于 2011-06-02T11:30:35.537 回答