CakePHP 2.0: ACL не работает - PullRequest
       1

CakePHP 2.0: ACL не работает

1 голос
/ 01 ноября 2011

Я использовал ACL в CakePHP 1.3 без единой проблемы, после 2 недель горьких разочарований он по-прежнему не работает в CakePHP 2.0.

Я следовал учебнику Cake ACL ТОЧНО, но ничего не происходит.Все Aros находятся правильно, то же самое для ACOS и разрешений.

После всего этого я могу без проблем ввести все запрещенные действия.

При этом мой 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');

Есть ли у кого-то идея, что идет не так.Спасибо!

Ответы [ 2 ]

2 голосов
/ 18 ноября 2011

В 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, который создает ваши ACO.Ваши 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

2 голосов
/ 09 ноября 2011

Компонент Auth немного изменился с CakePHP 1.3 до 2.0.Я столкнулся с похожими проблемами при переносе приложения с 1.3 на 2.0.Я обнаружил, что при настройке параметра авторизации мне нужно было внести свои изменения:

In beforeFilter:

$this->Auth->authorize = array(
    'Actions' => array(
        'userModel' => 'User',
        'actionPath' => 'users'
    )
);

UserModel был классом модели, используемым в таблице Aro.ActionPath - это корневой уровень действий, которые Acl проверяет в таблице Aco.

Вы также можете отрицать, затем разрешите:

$this->Auth->deny('*');
$this->Auth->allow('display');

Надеюсь, это поможет.

...