public function loadPrivilege() { if (!$this->acl || !$this->acl instanceof \Zend\Permissions\Acl\Acl) { return null; } $userService = $this->getServiceLocator()->get('User\\Service\\User'); /*@var $userService \User\Service\User */ if (!$userService->hasIdentity()) { return null; } $user = $userService->getUser(); if (in_array($user->getRole(), [\User\Model\User::ROLE_ADMIN, \User\Model\User::ROLE_SUPERADMIN, \User\Model\User::ROLE_GUEST])) { return null; } $dependence = $this->acl->getDependencies(); $resources = null; if ($resources) { foreach ($resources as $resource) { if ($this->acl->hasResource($resource['resource'])) { $this->acl->allow($user->getRole(), $resource['resource'], $resource['privilege']); if (isset($dependence['/' . str_replace(':', '/', $resource['resource']) . '/' . $resource['privilege']])) { foreach ($dependence['/' . str_replace(':', '/', $resource['resource']) . '/' . $resource['privilege']] as $depen) { $arr = explode('/', $depen); if (count($arr) == 4) { if ($this->acl->hasResource($arr[1] . ':' . $arr[2])) { $this->acl->allow($user->getRole(), $arr[1] . ':' . $arr[2], $arr[3]); } } } } } } } return $this->acl; }