2012-01-02 47 views
0

我真的很喜歡通過2個不同的接口認證我的設計用戶,以期有2個不同的佈局。設計與多個佈局

例如,我將能夠基於相同的用戶模型使用/ users/sign_in和/ admin/sign_in。

我已成立2條路線:

devise_for :users 

devise_for :users, :module => "admin/users", :path => '' 

但我不會SUR這是做正確的方式,因爲我需要覆蓋CURRENT_USER我的應用程序控制器上,這樣:

def current_user 
    super || current_admin_user 
end 

此外,我有2種方法:authenticate_user!和authenticate_admin_user!

我真的很困惑這個規範,任何人都可以幫忙嗎?

回答

0

我不知道如果我得到你的問題,如果沒有,請對此發表評論:)

沒有必要覆蓋CURRENT_USER。您可以創建一個過濾器,過濾器的管理員這樣的:

def require_admin_user 
    unless current_user.admin 
    flash[:error] = "You need admin privileges to enter this area" 
    redirect_to root_path 
    end 
end 

current_user將返回CURRENT_USER登錄,無論是管理還是它不是一個管理員。如果您希望用戶只能以普通用戶身份登錄,我會提出另一種方法:爲管理員創建另一個模型併爲require_user過濾!爲管理員sign_in

+0

嗨,謝謝你的回覆。這不是我想要的... 我有一個稱爲用戶角色(管理員,學生,...)的模型。對於學生用戶,我想要一個具有指定設計的登錄頁面(如/ user/sign_in)。對於其他用戶,我需要另一個登錄頁面(如/ admin/sign_in),並使用不同的設計和不同的設計控制器。 – skyporter 2012-01-03 13:12:11

0

最好的辦法是使用STA(Single Table Inheritance)...然後你可以使用2 devise_for聲明,每個模型一個。

+0

,這不能解決我的問題。我無法爲每個角色建立模型。我需要的僅僅是每個角色的不同登錄佈局。 – skyporter 2012-01-03 21:26:04

+0

我假設你在你的模型上有一個'role'屬性... STA會給你一個不同的'role'屬性值的類的層次結構,但是,你仍然會有一個名爲'users'的表。通過這種方式,您可以「欺騙」設計師認爲您擁有不同的模型,並利用這一點,擁有不同的登錄控制器等。 – 2012-01-03 23:39:09

0
I have a different controller admin in that i have added a login action. 

class AdminController < ApplicationController 
    def login 
     @user = User.new 
    end 
    end 

In view of login.html.erb 

<%= form_for(@user, :as => :user, :url => session_path(:user)) do |f| %> 
<% end %> 


U can now call admin/login path 

and successfully got sign up, but if you want to redirect to some other page after sign up instead of root url then 

In application controller write inside this method of devise 

def after_sign_in_path_for(resource) 
end