Я установил базовое приложение с ActiveAdmin, Cancan, Devise и Rolify. Он использует модель с одним пользователем (без отдельного администратора/пользователя).
Пока работает как шарм, но я изо всех сил пытаюсь ограничить доступ к интерфейсу администратора пользователям с ролью «суперадминистратор» (роли определяются в таблице «роли» и назначаются через users_roles)
В инициализаторе activeadmin я установил:
config.authentication_method = :authenticate_superadmin_user!
config.authorization_adapter = ActiveAdmin::CanCanAdapter
config.cancan_ability_class = "AdminAbility"
Затем я создал файл с именем admin_ability.rb:
class AdminAbility
include CanCan::Ability
def initialize(user)
if user.has_role?('superadmin')
can :manage, :all
end
end
end
и это мой контроллер приложения:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
def authenticate_superadmin_user!
raise SecurityError unless current_user.try(:role => 'superadmin')
end
def access_denied(exception)
redirect_to root_path, :alert => exception.message
end
end
Я думаю, что где-то делаю глупую ошибку (и я сделал слишком много копий и вставок) - возможно, в контроллере приложений? Может ли кто-нибудь помочь мне и объяснить, что я сделал неправильно?
Весьма признателен!