Cake PHP 1.2管理员修订应用程序。前缀/管理路由?

时间:2012-04-23 17:10:01

标签: cakephp admin cakephp-1.2

目前,Auth组件已用于锁定未登录任何人的应用程序访问权限。但是,users_controller的添加操作已经可用于路由,以便他们可以“注册”。 (重点是任何人都可以注册以访问应用程序的功能,但我需要实现一个独特的管理员用户

Router::connect('/register', array('controller' => 'users', 'action' => 'add'));

因此,在views / pages / home.ctp上放置了一个“注册”链接以及一个登录表单:

<p>
     Only takes about 1 minute to <?php echo $html->link('register', '/register'); ?> and its free.
   </p>

   <div id="login">

    <h2>Login</h2>

   <?php
    if  ($session->check('Message.auth')) $session->flash('auth');
    echo $form->create('User', array('action' => 'login'));
    echo $form->input('username', array('value' => 'billy'));
    echo $form->input('password', array('value' => 'billy'));
    echo $form->end('Login');
   ?>

   </div>

视图/元件/ header.ctp:

 <?php if($html->loggedIn()): ?>
        <ul class="right">
          <li><?php echo $html->link('Log Out', '/users/logout'); ?></li>
              </ul>
    </div>
        <?php endif; ?>
    <!-- end nav -->

我的大问题是我需要找到一种简单的方法,最好不要使用ACL来分隔编辑操作和删除users_controller的操作,这样只有管理员才能编辑和删除用户。

用户表的数据库结构需要唯一的用户名(VARCHAR)和唯一的ID(INT)

我是否有任何简单的方法可以在登录表单上实施检查,说明为用户名输入的字符串是'admin'还是'id'的值等于1,那么只允许这个唯一的'admin'用户访问用户控制器的编辑和删除操作?我想可能涉及一些路由。

或者是否正在激活核心中的cake_admin用户?

我可以根据要求提供更多代码。请记住我正在使用1.2版

users_controller.php中:

function edit($id = null) 
    {
    if(!$this->Session->read('Auth.User.admin') == 1) {
       // Not an admin user, go back where we came from
       $this->redirect($this->referer());
    }
    $this->idEmpty($id, 'index');

        if (!empty($this->data)) 
        {
            if ($this->User->save($this->data)) 
            {
        $this->flashSuccess('The User has been saved', 'index');
            } 
            else 
            {
        $this->flashWarning('The User could not be saved. Please, try again.');
            }
        }
        if (empty($this->data)) 
        {
            $this->data = $this->User->read(null, $id);
        }

    }


    function delete($id = null) 
    {
 if(!$this->Session->read('Auth.User.admin') == 1) {
       // Not an admin user, go back where we came from
       $this->redirect($this->referer());
    }
           $this->idEmpty($id, 'index');

        if ($this->User->del($id)) 
        {
      $this->flashSuccess('User Deleted', 'index');
        }

    }

1 个答案:

答案 0 :(得分:0)

请注意,我只会在较小的/私人应用程序中推荐以下解决方案。较大的应用程序/企业应用程序应该真正在ACL上运行。

话虽这么说,你可以做的是使用管理路由和一个次要的数据库调整。

  1. 取消注释Routing.prefix
  2. 中的app/config/core.php行,启用管理员路由前缀
  3. 调整您的用户表以保存名为BOOLEAN的其他admin类型字段(默认值为0)。
  4. 为管理员用户将admin字段值设置为1。
  5. 然后创建如下编辑/删除功能:

    function admin_edit($id = null) {
        if(!$this->Session->read('Auth.User.admin') == 1) {
           // Not an admin user, go back where we came from
           $this->redirect($this->referer());
        }
    
        // Rest of your logic goes here
    }