Размещение функций администратора CakePHP / MVC

Это вопрос скорее для мнений, чем для решения конкретной проблемы.

Я работаю с CakePHP в первый раз и сейчас работаю над административной частью сайта.

Где вы, как разработчик MVC или CakePHP, хотите добавить свои функции администратора?

Первоначально я помещал их в AdminController, но с тех пор изменил его на назначение функций в контроллер, предназначенный для типа обрабатываемых данных. Например, я помещаю списки пользователей / редактирование в UserController.

Для меня это имеет больше смысла, поскольку в UserController, возможно, будет полезной функция.

Если вы оставите ответ, не могли бы вы оставить несколько слов, говорящих почему? Возможно, это спорный вопрос.

заботиться, ли

— Редактировать

if ($this->Auth->user('user_type') == 1){//double-check the user is Admin $this->Auth->allow('display'); $this->Auth->allow('watch'); 

Я не думаю, что это спорный вопрос. Поместите функции администратора в свои соответствующие контроллеры (т. Е. Не все вместе в одном контроллере администратора) и используйте маршрутизацию префикса «admin», встроенную в Cake, чтобы защитить их. Это санкционированный CakePHP способ сделать это, и CakePHP позволяет вам создавать функции администратора таким образом с помощью консоли Bake.

Вы можете защитить все функции контроллера, предваряемые admin_, несколькими простыми строками кода в вашем AppController, и все функции администратора могут быть доступны через последовательные, согласованные URL-адреса, например: http://www.example.com/admin/my_controller/my_function

Это должно помочь вам начать: http://book.cakephp.org/2.0/en/development/routing.html#prefix-routing

Дайте мне знать, если вам нужна дополнительная помощь, и я уточню свой ответ с дополнительной информацией.

EDIT: Подробнее …

Вот несколько шагов для настройки маршрутизации admin:

1 / в приложении / Config / core.php, вокруг строки 113, убедитесь, что эта строка существует и раскоментирована:

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

2 / В приложении / Контроллере / AppController.php (т. Е. Суперклассах контроллера) протестируйте маршрутизацию admin в вашем методе beforeFilter. НЕ делайте этого в beforeFilter каждого контроллера – это не соответствует принципам DRY. Вот пример моего метода перед фильтром:

 function beforeFilter() { if (isset($this->request->params['admin'])) { // the user has accessed an admin function, so handle it accordingly. $this->layout = 'admin'; $this->Auth->loginRedirect = array('controller'=>'users','action'=>'index'); $this->Auth->allow('login'); } else { // the user has accessed a NON-admin function, so handle it accordingly. $this->Auth->allow(); } } в function beforeFilter() { if (isset($this->request->params['admin'])) { // the user has accessed an admin function, so handle it accordingly. $this->layout = 'admin'; $this->Auth->loginRedirect = array('controller'=>'users','action'=>'index'); $this->Auth->allow('login'); } else { // the user has accessed a NON-admin function, so handle it accordingly. $this->Auth->allow(); } } 

3 / Префикс всех ваших функций администратора с помощью admin_, и они должны автоматически быть доступны через маршрутизацию префикса.

например.

 function admin_dostuff () { echo 'hi from the admin function'; } // This will be available via http://www.example.com/admin/my_controller/dostuff function dostuff () { echo 'hi from the NON-admin function'; } // This will be available via http://www.example.com/my_controller/dostuff 

После того, как вы настроите эту настройку, все, что вам нужно сделать, это префиксные функции администратора с помощью admin_, и Cake будет обрабатывать все это для вас. Имеют смысл?

EDIT 2:

Вот несколько быстро написанных примеров кода, которые должны помочь вашей ситуации.

 function beforeFilter() { if (isset($this->request->params['admin'])) { // the user has accessed an admin_ function, so check if they are an admin. if ($this->Auth->user('user_type') == 1){ // an Admin user has accessed an admin function. We can always allow that. $this->Auth->allow(); } else { // A non-admin user has accessed an admin function, so we shouldn't allow it. // Here you can redirect them, or give an error message, or something } } else { // the user has accessed a NON-admin function, so handle it however you want. $this->Auth->allow(); // this example gives public access to all non-admin functions. } }