Авторизация на уровне атрибутов с использованием cancancan в рельсах - PullRequest
0 голосов
/ 03 июля 2018

Я использую 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 голосов
/ 05 июля 2018

Вы можете попробовать версию 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
0 голосов
/ 03 июля 2018

Вы должны определить Способность и позже проверить его :

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
...