Trong config/initializers/active_admin.rb
bạn có cấu hình như vậy:
config.authentication_method = :authenticate_admin_user!
vì vậy nếu bạn tạo ra một phương thức có tên authenticate_admin_user! trong ApplicationController, sau đó ActiveAdmin sẽ kiểm tra xem người dùng có thể truy cập các trang quản trị hay không. Như thế này:
# restrict access to admin module for non-admin users
def authenticate_admin_user!
raise SecurityError unless current_user.try(:admin?)
end
cứu nạn từ đó ngoại lệ trong ApplicationController (hoặc bạn thực sự có thể chuyển hướng bên trong phương pháp authenticate_admin_user!
)
rescue_from SecurityError do |exception|
redirect_to root_url
end
Và thêm một điều nhỏ, nếu bạn không có admin_users, sau đó nó sẽ được tốt đẹp để thay đổi dòng này trong config/initializers/active_admin.rb
:
config.current_user_method = :current_user
Và với devise bạn có thể muốn làm cho đường dẫn mặc định khác nhau cho admin/Không phải quản trị người dùng, do đó bạn có thể định nghĩa after_sign_in_path_for
phương pháp trong điều khiển
# path for redirection after user sign_in, depending on user role
def after_sign_in_path_for(user)
user.admin? ? admin_dashboard_path : root_path
end
Điều này có vẻ như một giải pháp tốt, bu current_user dường như không có sẵn trong ApplicationController ... Tôi có thể đặt nó ở một nơi khác? Bộ điều khiển –
mm thực sự là nơi mà nó được sử dụng nhiều nhất. Vậy bạn có vấn đề gì, nó trả về nil hoặc NoMethodError? – alony
Nó trả về 0; 'phương thức không xác định 'admin?' cho nil: NilClass'. Tôi DID xác định .admin? phương pháp, vì vậy đó không phải là nó. Tôi tìm thấy một số trường hợp current_user không có sẵn trong ApplicationControlller, có vẻ như bạn không phải acces nó từ đó. –