2013-05-19 1 views
2

Я создаю приложение на основе профиля. Я пытаюсь использовать простой учебник по администрированию acl, который можно найти здесь: http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/simple-acl-controlled-application.html, чтобы создать мои группы и разрешения. У меня возникли проблемы с получением разрешений для работы при входе в систему как разные пользователи. У меня есть администратор, менеджер и группа пользователей. Я установил ACOs и AROs, а также добавил разрешения для каждой группы. Вот мойCakePHP Acl контролируемое приложение не выполнено ARO/ACO lookup - Разрешения не регистрируются

class AppController extends Controller { 

    public $components = array(
     'Acl', 
     'Auth'=>array(
      'loginRedirect'=>array('controller'=>'users', 'action'=>'index'), 
      'logoutRedirect'=>array('controller'=>'users', 'action'=>'index'), 
      'authError'=>'You cannot access that page', 
      'authorize'=>array('actionPath' => 'controllers') 
     ), 
     'Session' 
    ); 

    public function isAuthorized($user) { 
     return true; 
    } 

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

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

     $this->set('logged_in', $this->Auth->loggedIn()); 
     $this->set('current_user', $this->Auth->user()); 

    } 

} 

UserController.php

class UsersController extends AppController { 

    public function beforeFilter() { 
     parent::beforeFilter(); 
     $this->Auth->allow('view'); 
    } 



    public function login() { 
     if ($this->request->is('Post')) { 
      if ($this->Auth->login()) { 
       $this->redirect($this->Auth->redirect()); 
      } else { 
       $this->Session->setFlash('Your username/password combination was incorrect'); 
      } 
     } 
    } 

    public function logout() { 
     $this->redirect($this->Auth->logout()); 
    } 

ошибка, что я получаю прямо сейчас:

Warning (512): DbAcl::check() - Failed ARO/ACO node lookup in permissions check. Node references: 
Aro: Array 
Permission::check() - CORE/Cake/Model/Permission.php, line 94 
DbAcl::check() - CORE/Cake/Controller/Component/Acl/DbAcl.php, line 73 
AclComponent::check() - CORE/Cake/Controller/Component/AclComponent.php, line 109 
ActionsAuthorize::authorize() - CORE/Cake/Controller/Component/Auth/ActionsAuthorize.php, line 40 
AuthComponent::isAuthorized() - CORE/Cake/Controller/Component/AuthComponent.php, line 412 
AuthComponent::startup() - CORE/Cake/Controller/Component/AuthComponent.php, line 336 
ObjectCollection::trigger() - CORE/Cake/Utility/ObjectCollection.php, line 132 
call_user_func - [internal], line ?? 
CakeEventManager::dispatch() - CORE/Cake/Event/CakeEventManager.php, line 248 
Controller::startupProcess() - CORE/Cake/Controller/Controller.php, line 671 
Dispatcher::_invoke() - CORE/Cake/Routing/Dispatcher.php, line 184 
Dispatcher::dispatch() - CORE/Cake/Routing/Dispatcher.php, line 162 
[main] - APP/webroot/index.php, line 109 

По какой-то причине он не может получить доступ разрешения. И я не могу найти решение, чтобы исправить это. Любая помощь будет замечательной! Заранее спасибо!

ответ

2

Эти ошибки обычно возникают из-за того, что вы добавляете функцию/метод в свой контроллер, но вы не заново заполняете таблицу acos и aros_acos.

вам необходимо заполнить ваши экоса таблицу

./Console/cake AclExtras.AclExtras aco_sync

http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/part-two.html

раз заселенной, то необходимо назначить разрешение этого нового метода в нашей таблице aros_acos

$ this-> Acl-> allow ($ group, 'controller/Posts/myNewCustomMethod');

затем снова запустите функцию initDB. Учебное пособие очень понятно шаг за шагом.

0

предупреждает MSJ, просто чтобы проверить: положить эти строки в функции beforeFilter проверить .. если это нормально, просто сосредоточиться на вашей permision в ..

public function beforeFilter() { 
    parent::beforeFilter(); 
    // For CakePHP 2.0 
    $this->Auth->allow('*'); 
    // For CakePHP 2.1 and up 
    $this->Auth->allow(); 
    // or you can put the view 
    $this->Auth->allow('index','edit','add','login','delete'); 
} 
Смежные вопросы