【问题标题】:Rails, gem choice for authorizationRails,授权的宝石选择
【发布时间】:2016-07-06 07:24:00
【问题描述】:
我正在构建一个应用程序,旨在帮助商店组织员工。有很多商店,每个商店的员工都有很多角色。唯一不变的职位是经理职位。我想让他/她创建他/她自己的角色。例如,在 A 店,送货员可能会更新 order_status,但在 B 店,他可能不会。
如您所见,我希望角色是自定义的,并且在特定商店中受到限制。
我正在考虑授权的三个宝石——cancancan、rolify 和 pundit(但我愿意接受建议)。 Rolify 不是那么有名,但它有一个方便的选择
user.has_role?(:manager, Shop.find(4))
您认为哪种宝石是最佳选择?谢谢!
编辑:我发现以下链接非常有用。 Click
【问题讨论】:
标签:
ruby-on-rails
ruby
rubygems
authorization
【解决方案1】:
对您问题的回答将基于回答者的意见。在我看来,我更喜欢 CanCanCan,主要是因为我已经使用了一段时间,刚开始理解设置可能有点问题,但一旦克服了这一点,一切都会一帆风顺。它的简单逻辑还允许我在我的应用程序中使用枚举并立即提高工作效率。其他人会争论 Pundit,它也易于设置,易于集成并且易于与其他库一起使用,例如 rolify 和 devise 等。在这种情况下可能没有正确或错误的答案,但我想它最终会是由您的具体用例和设置时间决定。
【解决方案2】:
如果您说授权比Pundit Gem 最好符合您的要求。
但据我所知,不仅专家或任何宝石为您做所有事情。您需要根据商店向所有用户授予动态权限。因此,您还需要管理数据库设置。
你需要三个类似的表。
用户
角色
权限
并设置如下关系
user has_one role
role has_many permissions
user has_many permissions through role
以上场景只是一个示例,核心逻辑可能会根据您的要求而有所不同。
希望这会对你有所帮助。
【解决方案3】:
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) 管理角色太容易了。检查示例并询问是否需要。