7

在 ActiveAdmin 0.6.0 中使用 CanCan 适配器时。我有一个资源正在工作并且授权正在工作。但是,当我转到/admin根 ActiveAdmin 页面时,它会重定向到/admin并永远持续下去。

4

3 回答 3

16

如果用户无权访问页面,ActiveAdmin 将重定向到仪表板。如果用户无权访问仪表板,则会导致无限重定向。

解决方案是让用户能够阅读仪表板页面。将其放置在能力模型对象中:

can :read, ActiveAdmin::Page, :name => "Dashboard"

授权适配器文档中提到了这一点,但无限重定向似乎是由 ActiveAdmin 中的错误引起的。它既不会引发 CanCan::AccessDenied,也不会向用户显示消息。至少,它应该在开发中显示一条消息以帮助解决此问题。但目前没有。

于 2013-07-02T18:33:59.070 回答
6

您可以使用此处config.on_unauthorized_access描述的配置选项。

# You can also specify a method to be called on unauthorized
# access. This is necessary in order to prevent a redirect
# loop that can happen if a user tries to access a page they
# don't have permissions for
# (see [#2081](https://github.com/gregbell/active_admin/issues/2081)).
config.on_unauthorized_access = :render_403

该方法access_denied将在application_controller.rb. 这是一个示例,它将用户从他们无权访问的页面重定向到他们有权访问的资源(本例中为组织),并在浏览器中显示错误消息:

类 ApplicationController < ActionController::Base

 def access_denied(exception)
   redirect_to admin_organizations_path, :alert => exception.message
 end

结尾

于 2013-09-12T15:56:47.433 回答
1

我有同样的错误,我有一个管理员用户:

if user.admin?
  can :manage, :all
end

我只是忘了给这个用户添加正确的角色,所以也许有人会和我一样使用 ActiveAdmin 和 Cancan 进行无限重定向循环。

于 2013-09-17T19:26:24.230 回答