2011-09-14 21 views
11

Tôi đã thêm vai trò quản trị viên vào Devise bằng cách thêm thuộc tính quản trị viên.Thiết lập trước before_filter authenticate_admin?

Ông có thể cho tôi biết nếu điều này là đúng cách để tạo ra một before_filter mà đòi hỏi một tài khoản admin để có chữ ký:

trong bất kỳ điều khiển:

before_filter :authenticate_admin! 

trong application_controller

protected 
    unless current_user.try(:admin?)  
    redirect_to :new_user_session_path  
    end 

Trả lời

22

Đi với phương pháp này

before_filter :authenticate_user! 
    before_filter do 
    redirect_to new_user_session_path unless current_user && current_user.admin? 
    end 

Điều này cũng đảm bảo bất kỳ khách nào cũng buộc phải đăng nhập. Bạn không cần phải sửa đổi phương pháp mặc định để buộc xác thực chỉ để truy cập vào các phương pháp dụ admin?

def admin? 
    self.admin == true 
end 

Tiếp cận của tôi là tạo ra một thuộc tính vai trò và kiểm tra giá trị chuỗi của nó chống lại một loạt các vai trò có ý định - đó là xa hơn linh hoạt theo cách này thay vì phải tạo ra nhiều thuộc tính boolean.

+0

Cảm ơn bạn. Tôi sẽ thử điều này sau. –

+0

Bạn đang chào đón =) –

+1

Không cần phải xác định quản trị ?, nếu cột quản trị đã là một Boolean thì bạn chỉ có thể gọi user.admin? và nó sẽ tự động trả về true hoặc false mà không có quản trị viên? phương pháp trong người dùng. – n0denine

1

Nhìn vào câu trả lời ở trên (bởi Michael De Silva), tôi gặp sự cố với mã mà anh ấy đã sử dụng. Ông đã viết đường dẫn như một biểu tượng (:new_user_session_path), nhưng tôi cần nó là một trợ giúp đường dẫn thông thường (new_user_session_path). Cho đến khi tôi thay đổi điều này, tôi đã nhận được lỗi, nói rằng đường dẫn không hợp lệ. (Tôi đang chạy Rails 5.)

Hy vọng điều này hữu ích cho người khác!

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