11

我正在为在 CakePHP 项目中创建管理部分的概念而苦苦挣扎。(2.3.5 版)

我取消了 Config/core.php 中的注释:

Configure::write('Routing.prefixes', array('admin'));

我在 Config/routes.php 中添加了这一行:(就像他们在 CakePHP 食谱中建议的那样。)

Router::connect('/admin', array('controller'=>'pages', 'action'=>'index','admin' => true));

在 AppController.php 我有以下内容:

    public $components = array(
    'Session',
    'Auth' => array(
        'loginRedirect'=>array('controller'=>'pages','action'=>'index', 'admin'=>true),
        'logoutRedirect'=>array('controller'=>'pages','action'=>'display','home'),
        'authError'=>'you have no access.',
        'authorize'=>array('Controller')
    )
);

然后我添加了一个布局 View/Pages/admin_index.ctp 这是我想在登录后重定向的地方。我设法让我的登录在 UsersController.php 中工作。

所以问题是,我应该在哪里重定向 AppController.php 让我登录的管理员到 admin_view?我相信 loginRedirect 不知何故坏了..

我研究了一些关于这个主题的教程,但我发现只有这个 Youtube 视频http://www.youtube.com/watch?v=zvwQGZ1BxdM所有其他教程似乎都与早期版本的 CakePHP 有关。

4

4 回答 4

1

我想你可以在 AppController 中设置一个 loginAction,然后在这个动作中你可以做:

$this->redirect(array('controller'=>'someController','action'=>'someAction','admin'=>true));
于 2013-06-07T00:01:21.170 回答
0

尝试这个

你的 config/routes.php

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

应用控制器

class AppController extends Controller {

public $components = array(
    'Acl',
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Form' => array( 
                'userModel' => 'User',
                 'fields' => array(
                    'username' => 'user_name',
                    'password' => 'password'
                    )
                )
            ),
        'loginAction' => array('controller' => 'users', 'action' => 'login'),
                    'loginRedirect' => array('controller' => 'users', 'action' => 'mysettings'),
        'logoutRedirect' => array('controller' => 'users', 'action' => 'login'),
        'authError' => 'You don\'t have access here.',
                /*
                'loginAction' => array('controller' => 'users', 'action' => 'forgot_password'),
                'loginRedirect' => array('controller' => 'users', 'action' => 'dashboard'),
                'logoutRedirect' => array('controller' => 'users', 'action' => 'forgot_password'),
                'authError' => 'You don\'t have access here.',
                */
        ),

);

用户控制器

class UsersController extends AppController {

/**
 * Components
 *
 * @var array
 */ 
public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('login','logout');
}

}
于 2013-11-14T05:54:35.417 回答
0

我有另一个解决方案。网站的管理面板有另一个图形、javasctipt 等,所以我在我的应用程序文件夹中这样做:

app_name
  +Model
  +Plugin
  +admin
  +front

是的,管理员在另一个文件夹中,所以我可以设置另一个 cookie 来登录管理区域,只有插件和模型是相同的。此文件夹结构需要在 bootstrap.php 中进行一些配置:

  App::build(array(
      'Plugin' => array(ROOT . DS . 'Plugin' . DS),
      'Model' => array(ROOT . DS . 'Model' . DS),
      'Model/Behavior' => array(ROOT . DS . 'Model' . DS . 'Behavior' . DS),
  ));

也许对你来说很疯狂,但我更喜欢这个使用管理路由的解决方案。

于 2013-10-07T21:50:05.667 回答
0

尝试这个

    public $components = array(
    'Auth' => array(
        'autoRedirect' => false,
        'loginRedirect' => array(
            'admin' => true,
            'controller' => 'dashboard',
            'action' => 'index',
        ),

        'loginAction' => array(
            'controller' => 'users',
            'action' => 'login',
            'admin' => false,
            'plugin' => false,
        ),
    ),
);
    // Now the before Filter which tells it its okay to go to index/view/or display actions.
    public function beforeFilter() {    
    // Allow public views
    $this->Auth->allow('index', 'view', 'display');
    }

对于用户登录,您将执行以下操作:

    public function login() {
    $this->set('title_for_layout', 'User Sign In');
     if ($this->request->is('post') || $this->request->is('put')) {
        if ($this->Auth->login()) {
                return $this->redirect($this->Auth->redirect());
        } else {
            $this->Session->setFlash('Username or password is incorrect', 'flash_bad');
        }
    }
}

您想要访问的任何方法都可以执行公共功能 admin_index、admin_view admin_settings 等,以便在小部件的控制器中,路由将是 /admin/widgets/index /admin/widgets/index 等等。允许在没有身份验证的情况下呈现其他页面的技巧只是将 $this->Auth->allow 放在 beforeFilter 中。

于 2013-08-07T20:38:13.617 回答