2013-07-02 5 views
6

При использовании адаптера CanCan в ActiveAdmin 0.6.0. У меня работает ресурс, и авторизация работает. Однако, когда я перехожу на /admin, корневую страницу ActiveAdmin, она перенаправляет на /admin и продолжает это навсегда.ActiveAdmin с CanCanAdapter вызывает бесконечное перенаправление на панели управления

ответ

12

Если пользователь не имеет доступа к странице, ActiveAdmin перенаправляется на Личный кабинет. Если пользователь не имеет доступа к панели управления, это приводит к бесконечному перенаправлению.

Решение должно дать пользователю возможность читать страницу панели мониторинга. Поместите это в объекте способность модели:

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

Это упоминается в authorization adapter documentation, но бесконечное редирект, кажется, вызвано плохим дизайном в ActiveAdmin. Он не поднимает CanCan :: AccessDenied и не выводит сообщение пользователю. По крайней мере, он должен отображать сообщение в разработке, чтобы помочь устранить эту проблему. Но в настоящее время это не так.

+0

Похоже, вы будете выдавать запрос на извлечение AA. – renegade

5

Вы можете использовать опцию конфигурации config.on_unauthorized_access, как описано here.

# 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 

конец

+0

Это правильное решение. К сожалению, Wiki, похоже, больше не упоминает об этом. Он работает в ActiveAdmin 0.6.0 –

+0

Я создал запрос на перенос, чтобы поместить его в active_admin.rb инициализатор. Комментарий +1, если вы считаете, что он должен быть включен в него. Вот ссылка: https://github.com/gregbell/active_admin/pull/2471 –

1

Я имел ту же ошибку, и у меня есть пользователь администратора с:

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

Я просто забыл добавить правильную роль этому пользователю, поэтому, возможно, у кого-то будет такой же бесконечный цикл переадресации, как у меня с ActiveAdmin и Cancan.

Смежные вопросы