[英]How to use cancancan?
我想在我的rails應用程序中為用戶授予權限。 我有'admin'可以創建,更新和刪除所有帖子和評論,'user'可以創建和更新他自己的評論,'guest“誰不能做這些。 為此,我使用了寶石'devise'和'cancancan'。 我理解'設計'寶石,但我不明白'cancancan'。
在class ability.rb中,如何為這些用戶(admin,user,guest)寫權限?
Cancancan
允許您僅定義給定上下文的權限。 此上下文可能是一個用戶角色,它不是cancancan
的一部分,因此角色必須由您自己定義。
有多種方法可以定義用戶角色,例如
這完全取決於用例。 可以在此處找到如何定義能力的示例。 在您的情況下,它看起來像:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.reviewer? #Just a logged user
can :manage, Comment, { owner_id: user.id }
elsif user.admin?
can :manage, :all
end
end
end
class User < ActiveRecord::Base
enum role: [ :reviewer, :admin ]
end
如果您打算使用Roles,請考慮Canard gem( https://github.com/james2m/canard ),它結合了CanCanCan和RoleModel( https://github.com/martinrehfeld/role_model )。 這為您提供了一種組織良好的方式來規定角色及其能力
例如,如果您有用戶模型,則可以按如下方式設置角色:
class User < ActiveRecord::Base
acts_as_user roles: [:supervisor, :manager, :writer]
end
然后,您可以為每個角色創建Ability文件,包括基本用戶(未分配任何角色)和Guest(未登錄)
Canard::Abilities.for(:user) do
can :manage, User, id: user.id
cannot [:destroy], User
end
以上將允許用戶更新他們自己的信息,但不允許他們自己刪除。 他們也無法訪問任何其他用戶記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.