gpt4 book ai didi

ruby-on-rails - 为 Web 应用程序实现细粒度授权的最佳方法?

转载 作者:行者123 更新时间:2023-12-04 07:29:22 27 4
gpt4 key购买 nike

我正在开发一个 Rails Web 应用程序,目前大约有 20 个用户正在使用它。

应用程序的某些部分只能由某些用户访问,因此我们已经有了一个基本的授权框架,我使用 act_as_authenticated 插件实现了该框架。

用户的权限取决于他们在哪个部门工作,例如管理可以访问应用程序的所有部分,而会计只能访问与会计相关的部分,销售只能访问与销售相关的部分等。

另一方面,用户会看到指向他们没有足够权限的操作的链接。例如,销售部门的人在主菜单中看到一个指向财务记录的链接,但是当他们点击它时,什么也没有发生。这是因为 AFAIK 没有使用acts_as_authenticated 查询用户权限的有效方法。

我想通过两种方式改变这一点:

  • 我想引入更细粒度的授权。目前,授权是在 Controller 级别完成的。我想在 Action 或模型级别执行此操作。例如,我希望销售部门的人员能够创建和更新付款,但不能删除它们。
  • 我希望能够有效地查询用户权限,因此我可以从界面中删除不必要的(和令人困惑的)链接。

  • 你认为最优雅的实现方式是什么?

    不需要特定于 Rails 的答案,我只想知道这应该如何在数据驱动的应用程序中实现。

    最后,这是它目前的实现方式:
    def authorized?
    current_user.role.foo? or current_user.role.bar?
    end

    这是我最初的想法,我认为这不是解决此问题的最佳方法:

    +------------+------------+---------+
    |部门| Controller |行动 |
    +------------+------------+---------+
    |会计|付款 |索引 |
    |会计|付款 |新 |
    |会计|付款 |创建 |
    |会计|付款 |编辑 |
    |会计|付款 |更新 |
    |会计|付款 |摧毁|
    |销售 |付款 |新 |
    |销售 |付款 |创建 |
    |销售 |付款 |编辑 |
    |销售 |付款 |更新 |
    +------------+------------+---------+

    或者

    +------------+----------+-------+--------+------+- -------+--------+
    |部门|模型 |列表 |创建 |阅读 |更新 |删除 |
    +------------+----------+-------+--------+------+- -------+--------+
    |会计|付款 |真|真|真|真|真|
    |销售 |付款 |错误 |真|真|真|错误 |
    +------------+----------+-------+--------+------+- -------+--------+

    最佳答案

    授权的基本概念,据我所知,是一个角色。
    角色可以表达各种各样的东西:

  • 用户与整个系统的关系(例如成为系统管理员)
  • 用户与某种实体的关系(例如,成为评论的主持人)
  • 用户与某个特定实体的关系(例如,成为某个资源的所有者)
  • 其他一些复杂的关系(例如,成为某个资源所有者的用户的 friend )
  • 该用户具有某些属性或以某种特定方式响应某些消息(例如成为青少年)

  • 一个真正细粒度的授权系统应该允许您根据上述任何标准为用户定义角色。此外,它应该允许您为一个用户设置多个角色。 (最简单的 Rails 授权插件形式通常只允许您定义第一种角色并为用户设置一个角色。)

    授权的另一部分是一种机制,它根据用户是否适合某个角色(角色集)来决定运行(或不运行)代码的哪一部分。为了应用这种机制,我们必须找到应该进行授权的点,并选择应该或不应该运行代码的角色。

    在 Rails 中对我有用的方法是在模型级别定义角色并保留授权机制(为我想要授权的代码部分设置允许的角色并询问当前用户是否具有允许运行该部分的角色) 完全用于 Controller / View 。

    为此,我使用了经过调整的 rails-authorization-plugin,它具有我刚刚提到的所有内置功能(各种角色、一个用户的多个角色、 Controller 和 View 级别的授权)。

    关于ruby-on-rails - 为 Web 应用程序实现细粒度授权的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/279415/

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