我正在使用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不提供属性级别授权,我该怎么办?
答案 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