Cancancan Не могу заставить его работать с пользователем и администратором - PullRequest
0 голосов
/ 29 ноября 2018

Так что я использую камень Cancancan в своем приложении. У меня есть Пользователи , аутентифицированные с помощью гемов Devise / Omniauth и Администраторы , что они аутентифицируются с помощью простой пользовательской аутентификации.Я хочу достичь способности

.bb

def initialize(userOrAdmin)

if userOrAdmin.user?
    can :read, User 
    return unless user.present?
    can :manage, User, id: user.id
  elsif userOrAdmin.admin? 
    can [:update, :read] , Admin, id: admin.id
  end
 end
end

, но это не работает.Я пытался переопределить метод способности, подобный этому

application_controller

 def current_ability

   if current_admin?
     @current_ability ||= Ability.new(current_admin)
   elsif current_user?
     @current_ability ||= Ability.new(current_user)
   end
 end

, но я получаю nomethod current_admin error вероятно, потому что Cancancan принимает current_admin от устройства, но не может найти его, хотя я использую собственный метод current_admin.

Я также попытался назначить роли с помощью enum в User.rb и Admin.rb и изменитьСпособность.rb правильно, но я получил неопределенный метод admin?для ошибки пользователя

Cancancan verion 2.0

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Я нашел решение, которое работает application_controller.rb

def current_ability
 if current_user
        return if current_admin.present?
     @current_ability ||= Ability.new(current_user)
   elsif current_admin
        return unless current_admin.present?
     @current_ability ||= Ability.new(current_admin)
   end
 end

end

способность.rb

class Ability
  include CanCan::Ability
  def initialize(userOrAdmin)
    if userOrAdmin.is_a? User
      can :read, User
      can [:update, :read], User, id: userOrAdmin.id
    elsif userOrAdmin.is_a?  Admin
      can :read, Admin
      can [:update, :read], Admin, id: userOrAdmin.id
   end
 end
end

Хотя это работает без ошибок.Всякий раз, когда я вошел в систему как пользователь и администратор, роль администратора появляется как ошибка авторизации CanCan.

0 голосов
/ 30 ноября 2018

После некоторых поисков я нашел несколько полезных статей:

Предлагаю попробоватьследующее:

# Ability.rb
class Ability
  include CanCan::Ability

  def initialize(user)
  # Everyone:
    can :read, User
  # Users:
    return unless user.present?
    can :manage, User, user_id: user.id
  # Admins:
    return unless user.admin?
    can :manage, :all
  end
end
# Routes.rb
devise_for :users  # current_user:
devise_for :admins  # current_admin: 
# Application_Controller.rb
def current_ability
  @current_ability ||= current_admin ? AdminAbility.new(current_admin) : UserAbility.new(current_user)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...