这可能是一个愚蠢的问题,但它让我感到害怕
假设我有admin
和application
布局。我有以下代码:
# For admin layout
class Admin::BaseController < ApplicationController
layout 'admin'
before_action :authenticate_user!
end
# For application layout
class DashboardController < ApplicationController
before_action :authenticate_user, only: :index
def index
end
end
现在,我访问/admin
并将其重定向到users/sign_in
,除非我已登录用户。同样,如果我访问dashboards
同样的事情会发生。
还要注意,我使用
user
设计模型来存储用户信息,使用role
来存储用户角色。这意味着,管理员用户可以访问admin
布局,other role
用户可以访问application
布局。
要求:
就像我为admin
用户分隔了管理员用户application
布局和other role
布局一样。
我想分隔admin
和application
布局的登录布局。
如果用户正在访问/admin
,那么他们应该重定向到admin
登录布局,如果用户正在访问/dashboards
,他们应该重定向到application
布局,如果他们没有登录
答案 0 :(得分:0)
您可以在Admin Base控制器中设置会话变量,如:
orm:
entity_managers:
# A collection of different named entity managers (e.g. some_em, another_em)
some_em:
metadata_cache_driver:
type: array # Required
host: ~
port: ~
instance_class: ~
class: ~
然后在ApplicationContoller中设置如下布局:
class Admin::BaseController < ApplicationController
# Set the admin layout
before_action :use_admin_layout
before_action :authenticate_user!
private
def use_admin_layout
session[:admin_layout] = true
end
end
您只需考虑清除任何NON管理控制器的会话。可能在before_action中。只需将其添加到您的ApplicationConroller
即可layout "admin" if session[:use_admin_layout]
并在必要时拨打电话:
private
def clear_admin_layout
session[:admin_layout] = nil
end