Второе утверждение ZfcRbac не работает | ZF2

Я добавил ниже код внутри zfc_rbac.global.php:

return [
'zfc_rbac' => [
   'assertion_map' => [
        'isAuthorizedToAddUser' => 'Application\Assertions\WhoCanAddUser',
        'isBranchOrOrgIdPresentIfNotAdmin' => 'Application\Assertions\BranchOrOrgIdPresentIfNotAdmin'
    ]
]]

И использовал его внутри контроллера, как показано ниже:

if (! $this->authorizationService->isGranted('isBranchOrOrgIdPresentIfNotAdmin')) {
    throw new UnauthorizedException('You are not authorized to add this aaa!');
}

но это исключение, даже если я return true из метода утверждения. Но если я заменю isBranchOrOrgIdPresentIfNotAdmin на isAuthorizedToAddUser, все будет нормально. Что тут может быть не так. Второй класс утверждений BranchOrOrgIdPresentIfNotAdmin является просто копией класса WhoCanAddUser. Ниже приведен мой класс утверждений WhoCanAddUser.

namespace Application\Assertions;

use ZfcRbac\Assertion\AssertionInterface;
use ZfcRbac\Service\AuthorizationService;
use ZfcRbac\Exception\UnauthorizedException;
use Zend\Session\Container;

class WhoCanAddUser implements AssertionInterface
{
    protected $notAuthorizedMessage = 'You are not authorized to add this user!';

    public function __construct()
    {
        $this->org_session = new Container('org');
    }

    /**
     * Check if this assertion is true
     *
     * @param AuthorizationService $authorization            
     * @param mixed $role            
     *
     * @return bool
     */
    public function assert(AuthorizationService $authorization, $role = null)
    {
        return true; //added this for testing if true is working and it worked, but second assertion is not working!
        switch($authorization->getIdentity()->getRole()->getName()){
            case 'admin':
                return true;
            break;
            case 'owner':
               if($role != 'member'){
                   throw new UnauthorizedException($this->notAuthorizedMessage);
               }
               return true;
            break;
            default:
                throw new UnauthorizedException($this->notAuthorizedMessage);
            break;
        }

        if($authorization->getIdentity()->getRole()->getName() != 'admin' && !$this->org_session->offsetExists('branchId')){
            throw new \Zend\Session\Exception\RuntimeException('You need to be connected to an Organisation's branch before you can add members. Contact your Organisation Owner.');
        }
    }
}

Я что-то упустил, что второе утверждение вообще не работает.


person Vipul    schedule 01.08.2016    source источник


Ответы (1)


Только что обнаружил, что запись isBranchOrOrgIdPresentIfNotAdmin должна находиться внутри таблицы разрешений и должна назначать это разрешение более низкому уровню роли внутри таблицы hierarchicalrole_permission (это разрешение будет автоматически предоставлено верхнему уровню роли, а также иерархическим способом), и это будет нормально работать для все они.

person Vipul    schedule 02.08.2016