使用cancancan

时间:2018-12-20 08:47:59

标签: ruby-on-rails cancancan

我想禁止管理员查看用户的数据(该用户手动添加的数据)。管理员只能看到他从管理面板添加的数据。我正在使用cancancan gem和活动的admin gem。

这是apache.rb文件,在其中使用了cancancan:

def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.admin?
      can :manage, :all
    else
      can :manage, WebCred, user_passes: {user_id: user.id}
    end
    index do
    selectable_column
    id_column
    column :email
    column :current_sign_in_at
    column :sign_in_count
    column :created_at
    actions
  end
  filter :email
  filter :current_sign_in_at
  filter :sign_in_count
  filter :created_at
  form do |f|
    f.inputs do
    f.input :email
    f.input :password
    f.input :password_confirmation
  end
  f.actions
end

这是我活动管理员的文件。 我想禁止管理员看到用户手动添加的Webcred的密码[sic],同时允许管理员查看他添加的密码。

1 个答案:

答案 0 :(得分:0)

您可以通过传递一个用于评估条件的块来添加新功能(当管理员不应该看到密码时,该块必须评估为true)。

def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.admin?
        can :manage, :all
        cannot :see_password, WebCred do |web_cred|
            web_cred.password_created_by_user_himself? ###Your condition here
        end
    else
        can :manage, WebCred, user_passes: {user_id: user.id}
    end
end

然后,您可以在视图或控制器中使用can? :see_password, WebCred.find(:id)来检查此功能。