Cancan Gem | Невозможно: индекс, пользователь
-
23-09-2019 - |
Вопрос
Очень простая пользовательская модель, я бы хотел, чтобы пользователь-администратор: управлял всем
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).
Не связан с StackOverflow