Rails,授权的宝石选择

时间:2016-07-06 07:24:01

标签: ruby-on-rails ruby rubygems authorization

我正在构建一个旨在帮助商店组织员工的应用程序。这里有许多商店,每个商店都有很多角色。唯一不变的职位是经理的职位。我想让他/她创造自己的角色。例如,在商店A中,送货员可以更新order_status,但在商店B中,他可能不会。 正如您所看到的,我希望角色可以自定义并限制在特定的商店中。 我正在考虑三个宝石授权 - cancancan,rolify和专家(但我愿意接受建议)。 Rolify不是那么着名,但它有一个方便的选择说

user.has_role?(:manager, Shop.find(4))  

您认为哪种宝石是最佳选择?谢谢!

编辑:我发现以下链接非常有用。 Click

3 个答案:

答案 0 :(得分:1)

对您的问题的回答将基于回答者的意见。在我看来,我更喜欢CanCanCan,很大程度上是因为我已经使用了一段时间了,一开始理解设置可能有点问题,但一旦得到它,它就是一个顺风帆。它的简单逻辑还允许我在我的应用程序中使用枚举,并立即提高工作效率。其他人会争论Pundit,它也很容易设置,易于集成,易于与其他库一起工作,例如rolify和devise等。在这种情况下可能没有正确或错误的答案,但我想它最终将是根据您的具体使用案例和设置时间确定。

答案 1 :(得分:1)

如果你认为授权比Pundit Gem最符合你的要求。

但据我所知,不仅专家或任何宝石为你做所有事情。您需要根据商店向所有用户提供动态权限。因此,您还需要管理数据库设置。

你需要三张表。

  

用户
  角色
  许可

并将关系设置如下

user has_one role
role has_many permissions
user has_many permissions through role 

以上场景只是一个例子,核心逻辑可能会根据您的要求而变化。

希望这会对你有所帮助。

答案 2 :(得分:0)

Pundit通过政策管理权限,我认为这是最好的。

你可以创建一个app / policies / application_policy.rb来管理像index / show / create ....这样的动作。

  def index?
    false
  end

  def show?
    false
  end

  def create?
    false
  end

  def new?
    create?
  end

  def update?
    false
  end

  def edit?
    update?
  end

  def destroy?
    false
  end

然后生成像

这样的政策
class MyClassPolicy < ApplicationPolicy
end

检查专家文档。

关于您可以使用的角色:角色模型gem(https://github.com/martinrehfeld/role_model)太容易管理角色。检查示例并询问是否需要。