Вопрос

Очень простая пользовательская модель, я бы хотел, чтобы пользователь-администратор: управлял всем

else не может: index, User и некоторые другие параметры, но когда я пытаюсь заблокировать пользователям, не являющимся администраторами, просмотр индекса пользователя, пользователь с правами администратора также не имеет доступа.

это моя способность.рб

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new #guest user

    can :manage, :all if user.role == "admin" #if user.admin? can :manage, :all
    can :assign_role, User 

    else
      can :read, :all
      can :create, User


      cannot :assign_role, User
      cannot :index, User

      can [:show, :edit, :update], User do |current_user|
              user.id == current_user.id || user.role == "admin"
            end



  end
end

Что я могу сделать, чтобы все пользователи не были заблокированы в индексе пользователей?

С уважением

Дэн

Это было полезно?

Решение

Что-то не так с if-else в коде.

if user.role == "admin"
  can :manage, :all
  can :assign_role, User 

else
  can :read, :all
  can :create, User


  cannot :assign_role, User
  cannot :index, User
  can [:show, :edit, :update], User do |current_user|
    user.id == current_user.id || user.role == "admin"
  end

end

А также вам не нужно явно запрещать пользователю, не являющемуся администратором, назначать роль (нельзя: assign_role, User).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top