2012-09-05 22 views
6

yardım benim o soru: -Devise authenticate_user

i 2 modeller (yönetici ve kullanıcı) sahip i post_controller var> vasiyetle, ile oluşturulan ve:

ve soru ortaya çıkıyor:

eğer i bir modeli (user.rb) var -> benim denetleyicisi i koymak i 2 modelleri var

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

ama ve ben 'gösterisi' ve 'indeks' eylem o erişmesini Kullanıcı istiyorum f sonrası kontrolörü ve Yönetici tüm eylemlere erişebilir.

ve ben böyle bir şey yapmak: Böyle bir şey

authenticate_user!

:

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

      else 
      authenticate_user! 
      end 
     end 

ama benim dize değiştirmek istiyorum

:authenticate_user!, :except => [:show, :index]
ancak haricinde atıfta before_filter

bunu nasıl yapabilirim ('cancan' gem olmadan)

cevap

13

Filtrelerden önce iki tane kullanmayı deneyin - biri yönetici için yalnızca eylemler, diğeri ise yönetici veya kullanıcı eylemleri için.

# 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