Khi sử dụng bộ điều hợp CanCan trong ActiveAdmin 0.6.0. Tôi có tài nguyên đang hoạt động và ủy quyền đang hoạt động. Tuy nhiên, khi tôi truy cập /admin
, trang ActiveAdmin gốc, trang này chuyển hướng đến /admin
và tiếp tục điều này mãi mãi.ActiveAdmin với CanCanAdapter gây ra chuyển hướng vô hạn trên trang tổng quan
Trả lời
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.
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 trongapplication_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
Đâ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 –
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 –
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.
Có vẻ như bạn sẽ phát hành yêu cầu kéo AA. – renegade