/** * for people * following parameter are relevant * by => 'all', 'me', 'guest' * status => Status::CREATED, 'all' * user => User::ROLE_RECRUITER, User::ROLE_ADMIN, User::ROLE_USER * * @param $params * @param $queryBuilder * @return mixed */ public function createQuery($params, $queryBuilder) { $this->value = $params->toArray(); $this->user = $this->auth->getUser(); $isRecruiter = $this->user->getRole() == User::ROLE_RECRUITER || $this->acl->inheritsRole($this->user, User::ROLE_RECRUITER); if ($isRecruiter && (!isset($this->value['by']) || $this->value['by'] != 'guest')) { /* * a recruiter can see his jobs and jobs from users who gave permissions to do so */ if (isset($this->value['params']['by']) && 'me' == $this->value['params']['by']) { $queryBuilder->field('user')->equals($this->user->id); } else { $queryBuilder->field('permissions.view')->equals($this->user->id); } if (isset($this->value['params']['status']) && !empty($this->value['params']['status']) && $this->value['params']['status'] != 'all') { $queryBuilder->field('status.name')->equals((string) $this->value['params']['status']); } } else { /* * an applicants or guests can see all active jobs */ $queryBuilder->field('status.name')->equals(Status::ACTIVE); } /* * search jobs by keywords */ if (isset($this->value['params']['search']) && !empty($this->value['params']['search'])) { $search = strtolower($this->value['params']['search']); $searchPatterns = array(); foreach (explode(' ', $search) as $searchItem) { $searchPatterns[] = new \MongoRegex('/^' . $searchItem . '/'); } $queryBuilder->field('keywords')->all($searchPatterns); } if (isset($this->value['location'])) { $loc = $this->value['location']; $queryBuilder->field('locations.coordinates')->near($loc->getCoordinates())->maxDistance($this->value['d'] * 1000); } if (isset($this->value['sort'])) { foreach (explode(",", $this->value['sort']) as $sort) { $queryBuilder->sort($this->filterSort($sort)); } } return $queryBuilder; }
/** * for people * following parameter are relevant * by => 'all', 'me', 'guest' * status => Status::CREATED, 'all' * user => User::ROLE_RECRUITER, User::ROLE_ADMIN, User::ROLE_USER * * @param $params Parameters * @param $queryBuilder \Doctrine\ODM\MongoDB\Query\Builder * @return mixed */ public function createQuery($params, $queryBuilder) { $this->value = $params; /* * search jobs by keywords */ if (isset($params['search']) && !empty($params['search'])) { $search = strtolower($params['search']); $expression = $queryBuilder->expr()->operator('$text', ['$search' => $search]); $queryBuilder->field(null)->equals($expression->getQuery()); } if (isset($this->value['location']->coordinates)) { $coordinates = $this->value['location']->coordinates->getCoordinates(); $queryBuilder->field('locations.coordinates')->geoWithinCenter($coordinates[0], $coordinates[1], (double) $this->value['d'] / 100); } if (isset($params['channel']) && !empty($params['channel']) && $params['channel'] != "default") { $queryBuilder->field('portals')->equals($params['channel']); } $this->user = $this->auth->getUser(); $isRecruiter = $this->user->getRole() == User::ROLE_RECRUITER || $this->acl->inheritsRole($this->user, User::ROLE_RECRUITER); if ($isRecruiter && (!isset($this->value['by']) || $this->value['by'] != 'guest')) { /* * a recruiter can see his jobs and jobs from users who gave permissions to do so */ if (isset($params['by']) && 'me' == $params['by']) { $queryBuilder->field('user')->equals($this->user->id); } else { $queryBuilder->field('permissions.view')->equals($this->user->id); } if (isset($params['status']) && !empty($params['status']) && $params['status'] != 'all') { $queryBuilder->field('status.name')->equals((string) $params['status']); } } else { /* * an applicants or guests can see all active jobs */ $queryBuilder->field('status.name')->equals(Status::ACTIVE); } if (isset($this->value['sort'])) { foreach (explode(",", $this->value['sort']) as $sort) { $queryBuilder->sort($this->filterSort($sort)); } } return $queryBuilder; }
public function __construct($roleName, array $permissions, Acl $acl) { parent::__construct(); $this->setAttribute('method', 'post'); $roles = $acl->getRoles(); $parentPermissions = []; foreach ($roles as $role) { if ($acl->inheritsRole($roleName, $role, true)) { foreach ($permissions as $permissionId => $permission) { if ($acl->isAllowed($role, $permission)) { $parentPermissions[$permissionId] = $permissionId; } } } } $permissionGroups = []; foreach ($permissions as $permissionId => $permission) { $fragments = explode('/', $permission); $groupName = reset($fragments); if (!array_key_exists($groupName, $permissionGroups)) { $permissionGroups[$groupName] = []; } $permissionGroups[$groupName][] = $permissionId; } foreach ($permissionGroups as $groupName => $groupPermissions) { foreach ($groupPermissions as $permission) { $permissionCheck = new Checkbox($permission); $permissionCheck->setLabel($permissions[$permission]); if (array_key_exists($permission, $parentPermissions)) { $permissionCheck->setValue(true); $permissionCheck->setAttribute('disabled', true); } $this->add($permissionCheck); if (!array_key_exists($groupName, $this->permissionGroups)) { $this->permissionGroups[$groupName] = []; } $this->permissionGroups[$groupName][] = $permissionCheck; } } $submit = new Submit('save'); $submit->setValue('save'); $submit->setAttribute('class', 'btn btn-primary'); $this->add($submit); }
/** * Ensures that the $onlyParents argument to inheritsRole() works * * @return void * @group ZF-2502 */ public function testRoleInheritanceSupportsCheckingOnlyParents() { $this->_acl->addRole(new Role\GenericRole('grandparent'))->addRole(new Role\GenericRole('parent'), 'grandparent')->addRole(new Role\GenericRole('child'), 'parent'); $this->assertFalse($this->_acl->inheritsRole('child', 'grandparent', true)); }