在Rails中使用cancancan进行属性级别授权

时间:2018-07-03 10:04:27

标签: ruby-on-rails activeadmin cancancan

我正在使用cancan进行授权。 我有不同的管理员角色,我想根据他们的角色(admin,mega_admin)向他们显示特定的列。基本上我想做这样的事情。

index do
 selectable_column
 column :first_column if can? :read_first_column #visible to mega_admin only
 column :second_column if can? :read_second_column
 actions
end

由于cancancan不提供属性级别授权,我该怎么办?

2 个答案:

答案 0 :(得分:0)

您必须先define an Ability,然后再check on it

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new
    if user.mega_admin? // here 
      can :mega_manage, :all
    else if user.admin?
      can :manage, :all
    else
      can :read, :all
    end
  end
end

答案 1 :(得分:0)

您可以尝试使用版本3.0(https://github.com/CanCanCommunity/cancancan/tree/feature/3.0.0)和属性级别权限功能(https://github.com/CanCanCommunity/cancancan/tree/feature/3.0.0#version-30)。

请注意,当前尚未发布,因此您必须从github中添加它:

gem 'cancancan', github: 'CanCanCommunity/cancancan', branch: 'feature/3.0.0'

使用版本3时,您可以定义:

can :read, ModelClass, :first_columnn
can :read, ModelClass, :second_columnn