gpt4 book ai didi

asp.net-mvc - 如何扩展/架构 ASP.NET MVC 3 授权属性来处理这种情况

转载 作者:行者123 更新时间:2023-12-02 03:15:02 26 4
gpt4 key购买 nike

我一直在尝试思考这个答案,但找不到如何正确执行此操作的良好解决方案。

我已阅读这些文章:
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?

想也许最后一个已经很接近了。


场景:

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

那么在 Controller 中,我怎么能说用户有权访问某个操作,因为我不知道用户管理员创建的角色是什么?

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

  • 任务:
    -- 任务ID
    -- 任务标题
    -- 任务部门ID

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

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

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


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

通过部门安全查看:
当另一个用户查看此任务时,他们可能有权访问“查看任务详细信息”(我可以弄清楚如何解决第一个问题)。但是,由于该任务是针对他们所在部门以外的另一部门的,因此我需要拒绝访问。仅当任务属于用户所在部门之一时,用户才能“查看任务详细信息”。

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

部门 ID 不一定需要缓存,因此也许我可以在 Controller 级别执行此操作。

最佳答案

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

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

关于asp.net-mvc - 如何扩展/架构 ASP.NET MVC 3 授权属性来处理这种情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5124106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com