2013-03-19 34 views
0

對於路徑標誌後,您可以執行以下操作:識別用戶登錄後出來after_sign_out_path_for方法設計

def after_sign_in_path_for(resource) 
    if resource.class == User 
    if resource.sign_in_count < 2 
     '/dashboard' 
    else 
     '/dashboard/home' 
    end 
    elsif resource.class == AdminUser 
    I18n.locale = "en" 
    '/admin/dashboard' 
    else 
    I18n.locale = "en" 
    '/' 
    end 
end 

但是,我怎麼能確認我的用戶是Usersign_outAdminUser

def after_sign_out_path_for(resource_or_scope) 
    if resource_or_scope == AdminUser 

這是行不通的。有沒有辦法檢查它?

注意:儘管我已經做了一個猴子補丁並且爲admin定義了新的root,並且我的問題已經解決,但是我想知道是否有任何方法可以使用Devise的after_sign_out_path_for方法實現?

回答

1

設計爲您提供current_user登錄後,登錄的用戶。沒有什麼比如用戶是管理員還是普通用戶。

所以它不是你可以使用的。

您可以使用其他方式獲得您想要的東西。

一個是Cancan,它可以與Devise很好地協作,您可以定義用戶角色。

使用Cancan,您可以在用戶表中定義一個列,稱爲角色,併爲每個用戶(如管理員或普通用戶)定義值。那麼Cancan將會有Ability.rb文件,並且你可以定義你的邏輯。

您可以使用條件 -

if user.role? :admin 
#admin related logic 
elsif user.role? :general 
#general user related logic 
end 
+0

好,謝謝......不過這是我已經知道了。設計中沒有直接檢查的方法嗎? (雖然我知道問題是會話被破壞。) – 2013-03-19 13:40:22

1

這將在這裏工作。

def after_sign_out_path_for(resource_or_scope) 
    if resource_or_scope == :user 
    redirect_to ... # users path 
    elsif resource_or_scope == :admin 
    redirect_to .... # admins path 
    end 
end 

設計會調用該方法after_sign_out_path_for與類名的符號作爲參數,因此我們可以檢查基於該符號的條件。

+0

好吧,讓我檢查。 – 2013-03-19 13:41:07

0

在用戶模型中,如果您有用於指定用戶角色的列,則可以執行此類操作。

def admin? 
    role == "admin" 
end 

然後你要做的就是

def after_sign_out_path_for(user) 
    if user.admin?