Я успешно создал систему входа в систему с Devise и CanCan, и у меня есть 3 типа пользователей. Админ, внутренние и глобальные пользователи. Я создал контроллеры и индексные действия: Admin, Cpanel, Report и State и хочу ограничить доступ к этим контроллерам для некоторых пользователей.
Администратор должен иметь права доступа: отчеты (все), состояние (чтение), администратор (все)
Глобальный пользователь должен иметь права доступа: отчеты (только чтение), состояние (чтение), Cpanel (все)
Внутренний пользователь должен иметь права доступа: отчеты (все), состояние (чтение)
И я попытался сделать это с помощью следующего кода в способе .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, и это не то поведение, которое я хочу. Я хочу ограничить доступ ко всем контроллерам вместо контроллеров, перечисленных в классеility.rb.
Исходный код здесь