2012-10-31 67 views
0

我創建了三個不同的角色(用戶,管理員,經理)使用devise的軌道發電機,他們存儲在不同的表和模型...設計:如何禁止從同一會話記錄不同的角色,同時

如何禁止某人在同一會話期間登錄兩個不同的角色?

+1

你能詳細說一下你的意思嗎?設計將根據模型的名稱創建不同的會話變量。 – Ant

+0

我不希望同一個人在同一瀏覽器窗口中以用戶和管理員身份登錄。 – Fuffinii

回答

0

當用戶嘗試登錄時,您可以驗證他沒有以另一個角色登錄。 要做到這一點,你將不得不重寫設計SessionsController。它被解釋爲here for RegistrationsController,但SessionsController也可以做到這一點。 接下來過濾器之前添加到您的新SessionsController:

before_filter :require_not_authenticated_in_other_scopes, :only => [:new, :create] 

然後只實現在控制器中的過濾器:

def require_not_authenticated_in_other_scopes 
    other_types = [:user, :admin, :manager] - [resource_name] 
    other_types.each do |type| 
    if self.send("#{type}_signed_in?") 
     resource = warden.user(type) 
     redirect_to after_sign_in_path_for(resource) 
    end 
    end 
end 

我已經採取了實現的部件從設計的SessionsController本身你可以找到它在他們的GitHub repository

相關問題