Создать aro / aco, имеющий aro и aco - PullRequest
1 голос
/ 24 февраля 2011

Я пытаюсь реализовать функциональность PDF в своем приложении. Итак, я добавил несколько новых действий в контроллеры (например, «viewpdf»). После этого я перестраиваю дерево ACL с помощью действия build_acl (из учебника Mark Story Автоматизированный инструмент для создания ACOS ). Итак, с MySQL я вижу, что создан новый узел. До этого все нормально. Но сейчас я пытаюсь протестировать кнопку viewpdf и получаю «У вас нет прав доступа к этому местоположению». ошибка (даже будучи администратором). Я проверяю файл error.log и вижу предупреждение:

> Aco: controllers/Specializations/viewpdf in [/usr/share/php/cake/libs/controller/components/acl.php, line 273]
2011-02-24 11:40:34 Warning: Warning (512): DbAcl::check() - Failed ARO/ACO node lookup in permissions check.  Node references:
Aro: Array
(
    [User] => Array
        (
            [id] => 1
            [email] => admin@gmail.com
            [group_id] => 1
        )

)

Aco: controllers/Specializations/viewpdf in [/usr/share/php/cake/libs/controller/components/acl.php, line 273]

Затем я проверяю таблицу aros_acos в базе данных и вижу, что нет ACO «viewpdf», связанного с каким-либо узлом, так что есть ARO, ACO, но не ARO_ACO, поэтому я полагаю, что это причина, почему я получаю эту ошибку.

¿Верны ли мои предположения? Если они есть, как я могу создать это aro_aco? Я боюсь, что могу что-нибудь сломать, если сделаю это вручную ...

Заранее спасибо,

Alf.

Ответы [ 2 ]

1 голос
/ 25 февраля 2011

alfizqu,

, если у вас есть ARO и ACO, но нет связи между ними посредством записей в таблице ACO_ARO, это означает, что вы не настроили разрешения, которые ваши ARO имеют для ACO.

Действуйте так:

/*
 * Copied from the tutorial, and modified, this function initializes the per-
 * missions for accessing controller actions.
 */
  function initDB() {
    $group =& $this->User->Group;

    // A D M I N S
    $group->id = 3;     
    $this->Acl->allow($group, 'controllers');

    // M A N A G E R S
    $group->id = 2;
    $this->Acl->deny($group, 'controllers');
    $this->Acl->allow($group, 'controllers/Items','*'); ... ...

После того, как вы настроили такую ​​функцию initDB, вы должны запустить ее один раз, вызвав ее из браузера.Если этого недостаточно, чтобы помочь вам вернуться на трассу, просто снова просмотрите базовый учебник AUTH / ACL.С уважением, Бенджамин.

Редактировать 1: Одним из важных моментов является вызов parent::beforeFilter() в beforeFilter() методах самоопределенных контроллеров и правильная настройка app_controller,Если эти советы не помогли, самый эффективный способ - внимательно изучить руководство по ACL / AUTH * , начиная со свежей выпечки.Как только вы сможете его запустить и запустить, вы уверены, что сделаете это в своем приложении.

Edit 2: И не бойтесь выбросить все, что связано с ACL / AUTHваше приложение.Это звучит просто устрашающе, но может избавить от головной боли и времени отладки.

PS: Кстати, в пекарне должно быть несколько плагинов ACL / AUTH, которые можно умеренно использовать, и один в sourceforge.

0 голосов
/ 24 февраля 2011

Попробуйте создать пример действия в пользовательском контроллере, как это

function install(){
     $aco = new Aco();
     $aco->create();
     $aco->save(array(
         'parent_id' => <Id of the Specializations in acos table>,
     'alias' => 'viewpdf',
     ));


    $this->Acl->allow('admin','controllers/Specializations/viewpdf','*');
}

Если вы запустите действие, в таблице acos будет создан новый узел Aco. и для пользователя с правами администратора вы можете дать полное разрешение. Вы можете использовать любого действительного пользователя (имя пользователя должно быть в таблице Aros) вместо admin.

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

...