【问题标题】:Rails Dynamic Role-Based Authorization plugin?Rails 动态基于角色的授权插件?
【发布时间】:2010-07-21 16:12:19
【问题描述】:

有很多基于角色的授权插件。当您提前知道角色将是什么时,它们会很好地工作。例如,如果我知道我将拥有管理员、super_users 和 not_so_super_users。

我真正想要的是能够创建自定义角色并将该角色分配给用户。此时,我只是想根据用户的自定义角色阻止对控制器/操作的访问。角色将由权限组成。

例如,Jane Doe 可以添加和查看小部件,但不能删除或编辑它们。 John Doe 可以添加、查看和编辑。 Boss 可以添加、查看、编辑和删除。我希望能够检查用户是否有权在一行中访问控制器/操作:

user.is_authorized?

is_authorized(或任何名称)应该足够智能,可以根据用户分配的角色和该角色的权限集确定用户是否获得授权。

我说得有道理吗?有什么东西可以做到这一点吗?

【问题讨论】:

  • 如果你做了 user.is_authorized_to?(:add, @widget) .... 这样该方法可以根据你定义的规则进行检查。这都是自定义的,但看起来可读
  • 我真的很喜欢它的语法,但是您需要知道第一个参数的关键字(可能每个 CRUD 操作一个)。我想将此逻辑应用于任何操作,包括与零个或多个不同模型交互的操作。在控制器中,您可以使用 before_filter 来检查 user.is_authorized?并在必要时重定向。 is_authorized?可能会检查用户能够访问的路线列表。这里只是头脑风暴...我真正要找的是基于角色的路由授权,而不是基于角色的模型授权
  • 不确定有多少逻辑可以保证插件。您必须以某种方式将每个控制器操作映射到一个角色,这就是关键所在。

标签: ruby-on-rails authorization ruby-on-rails-plugins


【解决方案1】:

请为基于角色的应用尝试插件 acl9。

acl9

【讨论】:

  • 这看起来像一个不错的插件,但不是我想要的。我正在寻找一些更简单的东西,也可以轻松设置视图,以便用户可以创建和分配角色。
【解决方案2】:

我会使用 declarative_authorization 并简单地为每个函数创建多个角色。

所以有一个特定的角色来编辑、更新、创建、销毁一个小部件(4 个不同的角色)。

然后只需将用户与多个角色相关联,无需重新实现轮子。

【讨论】:

    【解决方案3】:

    也许试试canardhttps://rubygems.org/gems/canard它使用了cancan的所有动态授权并为其添加了角色。我专门写了它来解决这个问题。

    【讨论】:

      猜你喜欢
      • 2015-09-30
      • 2022-01-01
      • 1970-01-01
      • 2017-12-14
      • 2017-04-12
      • 2018-07-21
      • 1970-01-01
      • 2020-06-22
      相关资源
      最近更新 更多