簡體   English   中英

如何使用cancancan?

[英]How to use cancancan?

我想在我的rails應用程序中為用戶授予權限。 我有'admin'可以創建,更新和刪除所有帖子和評論,'user'可以創建和更新他自己的評論,'guest“誰不能做這些。 為此,我使用了寶石'devise'和'cancancan'。 我理解'設計'寶石,但我不明白'cancancan'。

在class ability.rb中,如何為這些用戶(admin,user,guest)寫權限?

Cancancan允許您僅定義給定上下文的權限。 此上下文可能是一個用戶角色,它不是cancancan的一部分,因此角色必須由您自己定義。

有多種方法可以定義用戶角色,例如

  • 作為Role模型,
  • Rails enum
  • 這里所建議的,
  • 作為User模型的字符串屬性。

這完全取決於用例。 可以在此處找到如何定義能力的示例。 在您的情況下,它看起來像:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM