我以本教程为基础http://www.jamesfairhurst.co.uk/posts/view/creating_an_admin_section_with_cakephp_updated
并且目前为我的应用程序提供了一个功能强大且内容丰富的管理部分。
由于缺乏远见,我没有考虑到需要能够登录到他们自己的主页的普通用户,他们可以在其中查看预订等。
我有一个适当的数据库设置,并包含一个“角色”字段进行身份验证。我也遵循了 cakePHP 自己的 'auth' 示例,但是未能在不引发各种错误的情况下实现它们,在这个阶段我不想过多地改变登录系统的结构,那种事情可能会变成头疼快!!
我已与本教程的原作者交谈,他同意添加到 user_controller.php 文件中的一些简单逻辑就足够了。
基本上我需要类似这样的东西:“如果用户 == 'user' THEN 重定向到 'user_index.php' 简单地说。下面是 user_controller.php 的当前登录函数
function login() {
if(!empty($this->data)) {
// unset unrequired validation rules
unset($this->User->validate['username']['check_username_exists']);
// validate form
$this->User->set($this->data);
if($this->User->validates()) {
// update Last Login date
$this->User->id = $this->User->_user['User']['id'];
$this->User->saveField('last_login',date("Y-m-d H:i:s"));
// save User to Session and redirect
$this->Session->write('User', $this->User->_user);
$this->Session->setFlash('You have successfully logged in.','default',array('class'=>'flash_good'));
$this->redirect(array('action'=>'index','admin'=>TRUE));
}
}
}
所有验证都在 user.php 模型中处理,app_controller.php 中有一些逻辑来重定向身份验证,它包含在下面;
app_controller.php
class AppController extends Controller {
// class variables
var $_User = array();
/**
* Before any Controller action
*/
function beforeFilter() {
// if admin url requested
if(isset($this->params['admin']) && $this->params['admin']) {
// check user is logged in
if( !$this->Session->check('User') ) {
$this->Session->setFlash('You must be logged in for that action.','flash_bad');
$this->redirect('/login');
}
// save user data
$this->_User = $this->Session->read('User');
$this->set('user',$this->_User);
// change layout
$this->layout = 'admin';
}
}
}