【问题标题】:Limit access of active admin using cancancan使用 cancancan 限制活动管理员的访问
【发布时间】:2018-12-20 08:47:59
【问题描述】:

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

这是ability.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 的密码 [原文如此],同时允许管理员查看他添加的密码。

【问题讨论】:

  • 您的意思是当管理员未添加时,您不想在页面上显示特定的“密码”字段?您想加载页面,但不显示“密码”?
  • 我其实想要用户自己添加的密码,admin看不到admin为同一个用户设置的密码和密码,他(admin)可以看到自己的密码

标签: ruby-on-rails cancancan


【解决方案1】:

您可以通过传递用于评估条件的块来添加新功能(当管理员无法看到密码时,块必须评估为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) 检查此功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2019-08-11
    • 2015-08-19
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多