我想做一个用户可以正常登录的应用程序,以及管理员可以登录的后端。
到目前为止,我创建了这个:
routes.php文件
$prefix = 'admin';
Router::connect(
"/{$prefix}/:plugin/:controller",
array('action' => 'index', 'prefix' => $prefix, $prefix => true)
);
Router::connect(
"/{$prefix}/:plugin/:controller/:action/*",
array('prefix' => $prefix, $prefix => true)
);
Router::connect(
"/{$prefix}/:controller",
array('action' => 'index', 'prefix' => $prefix, $prefix => true)
);
Router::connect(
"/{$prefix}/:controller/:action/*",
array('prefix' => $prefix, $prefix => true)
);
AppController的:
public $components = array(
'DebugKit.Toolbar',
'Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'pages',
'action' => 'display'
),
'logoutRedirect' => array(
'controller' => 'pages',
'action' => 'display',
'home'
),
'authorize' => 'Controller',
'authError' => 'Access denied! Did you really think that you can access that?'
)
);
public function isAuthorized($user) {
// Admin can access every action
if (isset($user['role']) && $user['role'] === 'admin') {
return true;
}
// Default deny
return false;
}
public function beforeFilter() {
$this->Auth->allow('display');
//$this->recordActivity();
if($this->request->prefix == 'admin'){
$this->layout = 'admin';
}
}
当我尝试访问需要auth的前端页面时,它会给我login()动作,但是当尝试访问/ admin时,它会将我重定向到/ users / login。
我想要两个具有不同布局的独立登录系统。一个用于普通用户,一个用于管理员用户。
有人可以帮忙吗?
答案 0 :(得分:2)
我不建议仅为了不同的视图而进行两次login()
操作。您可以将if语句从beforeFilter()
移至UsersController::login()
以正确设置布局。但是,如果您确实要继续执行单独的操作,请在AuthComponent::loginAction
中设置AppController::beforeFilter()
属性,如:
if($this->request->prefix == 'admin'){
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'admin_login', 'plugin' => false);
}
其中admin_login将是您在UsersController中创建的另一个操作。
另外,我建议使用cake book中提到的cake的默认前缀路由。它与您所做的非常相似,但您不必手动创建路线。另外,如那里所述,要访问/ admin,您需要定义一个路径,如:
Router::connect(
'/admin',
array('controller' => 'pages', 'action' => 'index', 'admin' => true)
);