Rails、gem授权选择
Rails, gem choice for authorization
我正在构建一个旨在帮助商店组织员工的应用程序。有很多商店,每个商店的员工都有很多角色。唯一不变的位置是经理的位置。我想启用 him/her 来创建 his/her 自己的角色。比如在A店,外卖小哥可能会更新order_status,但在B店,他可能不会。
如您所见,我希望这些角色是自定义的,并受限于特定的商店。
我正在考虑三个 gem 的授权 - cancancan、rolify 和 pundit(但我愿意接受建议)。 Rolify 不是那么有名,但它有一个方便的选项
user.has_role?(:manager, Shop.find(4))
您认为哪个 gem 是最好的选择?谢谢!
编辑: 我发现以下 link 非常有帮助。 Click
您的问题的回复将基于回答者的意见。在我看来,我更喜欢CanCanCan,主要是因为我已经使用了一段时间,开始理解设置可能有点问题,但是一旦克服了,一切都很顺利sail。它的简单逻辑还允许我在我的应用程序中使用枚举并立即提高工作效率。其他人会争辩 Pundit,它也易于设置和易于集成,并且易于与其他库一起工作,例如 rolify 和 devise 等。在这种情况下可能没有正确或错误的答案,但我想它最终会是由您的具体用例和设置时间决定。
如果你说要授权,那么 Pundit Gem 最好根据你的要求。
但据我所知,不仅专家或任何 gem 都会为您做所有事情。您需要根据商店向所有用户授予动态权限。因此,您还需要管理数据库设置。
你需要三个table赞。
User
Role
Permission
并设置关系如下
user has_one role
role has_many permissions
user has_many permissions through role
以上场景只是一个示例,核心逻辑可能会因您的要求而异。
希望对您有所帮助。
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) 管理角色太容易了。检查示例并询问是否需要。
我正在构建一个旨在帮助商店组织员工的应用程序。有很多商店,每个商店的员工都有很多角色。唯一不变的位置是经理的位置。我想启用 him/her 来创建 his/her 自己的角色。比如在A店,外卖小哥可能会更新order_status,但在B店,他可能不会。 如您所见,我希望这些角色是自定义的,并受限于特定的商店。 我正在考虑三个 gem 的授权 - cancancan、rolify 和 pundit(但我愿意接受建议)。 Rolify 不是那么有名,但它有一个方便的选项
user.has_role?(:manager, Shop.find(4))
您认为哪个 gem 是最好的选择?谢谢!
编辑: 我发现以下 link 非常有帮助。 Click
您的问题的回复将基于回答者的意见。在我看来,我更喜欢CanCanCan,主要是因为我已经使用了一段时间,开始理解设置可能有点问题,但是一旦克服了,一切都很顺利sail。它的简单逻辑还允许我在我的应用程序中使用枚举并立即提高工作效率。其他人会争辩 Pundit,它也易于设置和易于集成,并且易于与其他库一起工作,例如 rolify 和 devise 等。在这种情况下可能没有正确或错误的答案,但我想它最终会是由您的具体用例和设置时间决定。
如果你说要授权,那么 Pundit Gem 最好根据你的要求。
但据我所知,不仅专家或任何 gem 都会为您做所有事情。您需要根据商店向所有用户授予动态权限。因此,您还需要管理数据库设置。
你需要三个table赞。
User
Role
Permission
并设置关系如下
user has_one role
role has_many permissions
user has_many permissions through role
以上场景只是一个示例,核心逻辑可能会因您的要求而异。
希望对您有所帮助。
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) 管理角色太容易了。检查示例并询问是否需要。