【发布时间】:2014-02-28 21:25:28
【问题描述】:
我已经使用 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
我认为我在某个地方犯了一个愚蠢的错误(而且我做了太多的复制和粘贴) - 可能是在应用程序控制器中?有人可以帮助我并解释我做错了什么吗?
非常感谢!
【问题讨论】:
-
任何想法如何让超级管理员使用设计:是否有指向此类页面的链接?
标签: ruby-on-rails devise activeadmin cancan rolify