2

我以本教程为基础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';
        }
    }
}
4

1 回答 1

0

我在我的应用程序中遇到了类似的问题。在我的 User 模型中,我创建了一个 getRole() 方法,它只是将角色从数据库中提取出来,然后我使用一条switch语句将用户重定向到正确的控制器。

作为一种不同的方法,您可以在isAdmin您的用户表中添加一列(默认为 0,1 表示管理员)。假设已经没有太多管理员,您可以手动设置管理员。在您的控制器中,您只需要相应地检查字段和重定向。

于 2013-01-22T21:27:58.093 回答