2012-02-12 33 views
9

Tôi đã thiết lập ActiveAdmin sớm trong dự án của mình và đã sử dụng mô hình admin_users mặc định để xác thực. Tôi đã sử dụng Devise để thiết lập một mô hình User riêng biệt và đã nhận ra rằng nó có thể thông minh hơn nhiều để hợp nhất hai bảng, như vậy một Quản trị viên có thể có các hành động quản trị cả Activeadmin và phần đầu của trang. Làm thế nào tôi có thể cấu hình ActiveAdmin để sử dụng mô hình Người dùng có thể là một cột để gắn cờ một quản trị viên (ví dụ: is_admin hoặc sự kiện cấp quyền để làm cho Quản trị viên và Người kiểm duyệt)?Hợp nhất người dùng ActiveAdmin với mô hình người dùng hiện tại

Rails 3.1 
ActiveAdmin 0.3.3 
Devise 1.4.9 

Trả lời

9

Để biết khối mã nhanh về cách thực hiện việc này bằng mô hình "Người dùng" hiện có với activeadmin, câu trả lời thực sự rất dễ dàng. Trong ApplicationController:

class ApplicationController < ActionController::Base 
    def authenticate_admin_user! #use predefined method name 
     redirect_to '/' and return if user_signed_in? && !current_user.is_admin? 
     authenticate_user! 
    end 
    def current_admin_user #use predefined method name 
     return nil if user_signed_in? && !current_user.is_admin? 
     current_user 
    end 
end 

Và chỉ sử dụng những gì Devise đã thiết lập để xác thực. redirect_to là nơi bạn muốn gửi cho người dùng đã đăng nhập và KHÔNG có đặc quyền quản trị.

4

ActiveAdmin cho phép bạn define your own authentication methods. Bạn có thể di chuyển bảng người dùng của mình để có cột quản trị bổ sung và đánh dấu quản trị viên hiện tại như vậy trong đó, sau đó đặt phương thức xác thực của bạn (như được chỉ định) trong config/initializers/active_admin.rb.

+0

+1 vì tôi tin rằng bạn đang cho tôi câu trả lời đúng. Tôi giả sử tôi xây dựng phương thức mới trong 'application_controller'? Nhưng tôi phải làm gì từ đó để tích hợp xác thực Devise hiện tại mà không ghi đè các hành động hiện tại được đặt ra bằng cách đưa ra? –

+0

Nếu các phương thức Devise hiện có hoạt động, bạn chỉ có thể chuyển chúng làm biểu tượng cho ActiveAdmin. Nếu không, bạn có thể ghi đè lên chúng hoặc định nghĩa các phương thức mới ở đâu đó có ý nghĩa đối với ứng dụng của bạn ('ApplicationController' là một nơi khá phổ biến). – coreyward

Các vấn đề liên quan