Я успешно создал систему входа в систему с помощью Devise и CanCan, и у меня есть 3 типа пользователей. Администратор, внутренние и глобальные пользователи. Я создал контроллеры и индексные действия: Admin, Cpanel, Report и State, и я хочу ограничить доступ к этим контроллерам для некоторых пользователей.
Пользователь-администратор должен иметь права доступа: Отчеты (все), Состояние (чтение), Администрирование (все).
Глобальный пользователь должен иметь права доступа: Отчеты (только чтение), Состояние (чтение), Cpanel (все)
Внутренний пользователь должен иметь права доступа: Отчеты (все), Состояние (чтение)
И я попытался сделать это с помощью следующего кода в файле Ability.rs:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.role? :admin
can :manage, [Report, Admin]
can :read, State
elsif user.role? :global_user
can :read, [Report, State]
can :manage, Cpanel
elsif user.role? :internal_user
can :manage, Report
can :read, State
end
end
end
В настоящее время у меня есть только действия индекса в этих контроллерах, и когда я вхожу в приложение с внутренним пользователем, я МОГУ получить доступ, например, к /admin, и это не то поведение, которое я хочу. Я хочу ограничить доступ ко всем контроллерам, а не к контроллерам, перечисленным в классе Ability.rb.