#cakephp-2.0
#cakephp-2.0
Вопрос:
Я использовал ACL в CakePHP 1.3 без единой проблемы, после 2 недель горьких разочарований он все еще не работает в CakePHP 2.0.
Я точно следовал руководству по ACL Cake, но ничего не происходит. Все Aro введены правильно, то же самое для ACO и разрешений.
После всего этого я могу без проблем вводить все запрещенные действия.
Таким образом, мой AppController:
public $components = array('Acl','Auth'=> array(
'authenticate' => array(
'Actions',
'Form' => array(
'fields' => array('username' => 'email')
),
)
), 'Session', 'MathCaptcha', 'RequestHandler');
В моем beforeFilter:
$this->Auth->actionPath = 'controllers';
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'pages', 'action' => 'home');
$this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'profile');
$this->Auth->allow('display');
У кого-нибудь есть идея, что пойдет не так. Спасибо!
Ответ №1:
В CakePHP 2.0 я сделал это так:
app/Controller/AppController.php
class AppController extends Controller {
public $components = array(
// others components...
'Session',
'Acl',
'Auth'=> array(
// Setting AUTHORIZATION "What can you do?"
'authorize' => array(
'Actions' => array(
'actionPath' => 'controllers'
)
),
// Setting AUTHENTICATION "Who are you?"
'authenticate' => array(
'Form' => array(
'fields' => array(
'username' => 'email', 'password' => 'password'
)
)
)
)
);
// other stuffs...
При таком подходе ACL сделает всю грязную работу. Нет необходимости проверять разрешения, как вы, вероятно, знаете.
Я полагаю, что вы в порядке с ARO и ACO, ничего страшного. На всякий случай: http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/simple-acl-controlled-application.html#simple-acl-controlled-application
В CakeBook для 2.0 показан консольный плагин под названием AclExtras, который создает ваши ACOS. Ваши ARO будут создаваться по мере добавления / удаления пользователей и групп. Я использовал этот плагин для создания ARO в отношении моих уже заполненных таблиц: http://www.alaxos.ch/blaxos/pages/view/plugin_acl . Это работает с версии 1.3, но есть бета-версия для версии 2.0, которая работает нормально.
После этого необходимо настроить разрешения. Вручную (или с консоли), как описано в этих ссылках: http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/part-two.html#setting-up-permissions. Или визуально с помощью плагина Alaxos.
Я надеюсь, что это поможет! Это сработало для меня. Я использую CakePHP 2.0.2
Комментарии:
1. Большое спасибо за ответ, Коларес, вместе с ответом Скотта мне удалось заставить его работать.
Ответ №2:
Компонент аутентификации немного изменился с CakePHP 1.3 на 2.0. Я столкнулся с аналогичными проблемами при переносе приложения с 1.3 на 2.0. Я обнаружил, что настройка параметра авторизации была там, где мне нужно было внести изменения:
В beforeFilter:
$this->Auth->authorize = array(
'Actions' => array(
'userModel' => 'User',
'actionPath' => 'users'
)
);
UserModel был классом модели, используемым в таблице Aro. actionPath — это корневой уровень действий, которые Acl проверяет в таблице Aco.
Вы также можете запретить, а затем разрешить:
$this->Auth->deny('*');
$this->Auth->allow('display');
Надеюсь, это поможет.