2013-07-02 31 views

Trả lời

12

Nếu người dùng không có quyền truy cập vào một trang, ActiveAdmin sẽ chuyển hướng đến Trang tổng quan. Nếu người dùng không có quyền truy cập vào trang tổng quan, điều này dẫn đến chuyển hướng vô hạn.

Giải pháp là cung cấp cho người dùng khả năng đọc trang bảng điều khiển. Đặt này trong đối tượng mô hình khả năng:

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

này được đề cập trong authorization adapter documentation, nhưng chuyển hướng vô hạn dường như được gây ra bởi thiết kế nghèo ở ActiveAdmin. Nó không phải là nâng cao một CanCan :: AccessDenied, cũng không hiển thị một tin nhắn cho người dùng. Ít nhất, nó sẽ hiển thị một thông báo trong quá trình phát triển để giúp khắc phục vấn đề này. Nhưng nó hiện không.

+0

Có vẻ như bạn sẽ phát hành yêu cầu kéo AA. – renegade

5

Bạn có thể sử dụng tùy chọn cấu hình config.on_unauthorized_access như được mô tả 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 

Phương pháp access_denied sẽ được xác định trong application_controller.rb. Dưới đây là một ví dụ chuyển hướng người dùng từ trang họ không có quyền truy cập vào tài nguyên mà họ có quyền truy cập (tổ chức trong trường hợp này) và cũng hiển thị thông báo lỗi trong trình duyệt:

lớp ApplicationController < ActionController :: Base

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

cuối

+0

Đây là giải pháp đúng. Thật không may, Wiki dường như không đề cập đến nó nữa. Nó hoạt động trong ActiveAdmin 0.6.0 –

+0

Tôi đã tạo yêu cầu pull để đặt nó vào initial_admin.rb initializer. Nhận xét +1 nếu bạn cho rằng nó nên được đưa vào đó. Đây là liên kết: https://github.com/gregbell/active_admin/pull/2471 –

1

tôi đã có lỗi tương tự, và tôi có một tài khoản admin với:

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

Tôi chỉ quên thêm vai trò chính xác cho người dùng này, vì vậy có thể ai đó sẽ có cùng vòng lặp chuyển hướng vô hạn như tôi với ActiveAdmin và Cancan.