2012-09-05 9 views
6

giúp đỡ của tôi trong câu hỏi rằng:lập mưu authenticate_user

tôi có 2 mô hình (admin và người sử dụng) -> tạo ra với devise, và tôi có post_controller:

và câu hỏi đặt ra:

nếu tôi có một mô hình (user.rb) -> trong điều khiển của tôi tôi đặt rằng:

before_filter :authenticate_user!, :except => [:show, :index] 

nhưng tôi có 2 mô hình và tôi muốn cho người dùng có quyền truy cập vào 'show' và 'index' o hành động f post controller và Admin có quyền truy cập vào tất cả các hành động.

và tôi làm điều gì đó như thế:

before_filter :logged_in 
. 
. 
. 
    private 
     def logged_in 
      if admin_signed_in? 

      else 
      authenticate_user! 
      end 
     end 

nhưng tôi muốn thay đổi chuỗi của tôi:

authenticate_user!

một cái gì đó như thế:

:authenticate_user!, :except => [:show, :index]
nhưng ngoại trừ đề cập đến before_filter

làm cách nào tôi có thể làm điều đó (không có 'cancan' đá quý)

Trả lời

13

Hãy thử sử dụng hai bộ lọc trước khi lọc - một cho hành động chỉ dành cho quản trị viên và một cho quản trị viên hoặc hành động của người dùng.

# ensure admin for other actions 
before_filter :check_admin_logged_in!, :except => [:show, :index] 

# ensure user or admin logged in for these actions (:only option is optional) 
before_filter :check_user_logged_in!, :only => [:show, :index] 

private 
    def check_admin_logged_in! # admin must be logged in 
     authenticate_admin! 
    end 
    def check_user_logged_in! # if admin is not logged in, user must be logged in 
     if !admin_signed_in? 
     authenticate_user! 
     end 
    end