Контроль доступа в zend framework

У меня есть баги, на самом деле это ошибка, это уведомление, но все же, я хотел бы это исправить;

Когда я пытаюсь получить доступ к страницам с null role, он показывает это сообщение:

Notice: Trying to get property of non-object in C:\Zend\Apache2\htdocs\hotelrwanda\application\plugin\AccessCheck.php on line 18

Как это исправить, вот мой скрипт:

 public function preDispatch(Zend_Controller_Request_Abstract $request) {

        $resource = $request->getControllerName();
        $action = $request->getActionName();

        $identity = $this->_auth->getStorage()->read();
        $role = $identity->role;


        if(!$this->_acl->isAllowed($role, $resource, $action)){
            $request->setControllerName('users')
                    ->setActionName('login');
        }
    }

Строка: 18 это строка :$role = $identity->role;


person Akram    schedule 13.05.2012    source источник
comment
похоже, что роль недействительна. Вы уверены, что роль была сохранена как часть удостоверения в Zend_Auth? Сбросить личность и посмотреть, что там. Возможно, вы неправильно сохраняете роль в сеансе. Чтобы понять, почему свойство недопустимо, нам нужно увидеть код, в котором идентификатор сохраняется в хранилище.   -  person RockyFord    schedule 13.05.2012
comment
Нет, я ничего не добавлял, потому что, основываясь на учебнике, я обнаружил, что такой вещи нет. можешь показать мне, как это сделать   -  person Akram    schedule 13.05.2012
comment
Вы на самом деле назвали роль «нулевой»? Если да то меняй. В противном случае у вас будут всевозможные проблемы.   -  person vascowhite    schedule 13.05.2012
comment
Итак, как я могу определить это по-другому   -  person Akram    schedule 13.05.2012


Ответы (1)


  public function preDispatch(Zend_Controller_Request_Abstract $request) {

            $resource = $request->getControllerName();
            $action = $request->getActionName();

           $role = 'guest';  //your default role 

        if(Zend_Auth::getInstance()->hasIdentity())
        {
            $role = Zend_Auth::getInstance()->getIdentity()->role;
        }


            if(!$this->_acl->isAllowed($role, $resource, $action)){
                $request->setControllerName('users')
                        ->setActionName('login');
            }
        }

Здесь «гость» действует как роль по умолчанию. Вы можете назвать его как угодно, но не забудьте добавить эту роль в свой acl и дать соответствующее разрешение этой роли.

person Mr Coder    schedule 13.05.2012
comment
Но гость должен иметь нулевое значение, если я объявлю гостя, система попросит меня войти в систему - person Akram; 13.05.2012
comment
Как я могу определить гостя как null - person Akram; 13.05.2012
comment
Система попросит вас войти в систему только тогда, когда данный ресурс не разрешен для гостевой роли. Которым можно легко управлять через acl. Здесь роль гость действует как нуль, но дает вам возможность определить уровень доступа роли, которая не определена. - person Mr Coder; 13.05.2012
comment
Нет, а если пользователь не авторизован, в этом случае роль будет равна нулю. не так ли - person Akram; 13.05.2012
comment
здесь role = 'guest' действует как резервная роль или роль по умолчанию, когда роль не найдена. Таким образом, даже пользователь, не вошедший в систему, acl разрешит свой доступ через гостевую роль. - person Mr Coder; 13.05.2012
comment
Извините, это был мой косяк, я не заметил $role = 'guest'; //your default role. Большое тебе спасибо - person Akram; 13.05.2012