2012-01-02 75 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