我已经使用 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
我想我在某个地方犯了一个愚蠢的错误(而且我做了太多的复制和粘贴)——可能是在应用程序控制器中?有人可以帮助我并解释我做错了什么吗?
非常感谢!