public function testPut() { $client = $this->createAuthenticatedClient(); $client->request('PUT', '/api/users/' . $this->user1->getId(), ['username' => 'manager', 'password' => 'verysecurepassword', 'locale' => 'en', 'contact' => ['id' => $this->contact1->getId()], 'userRoles' => [['id' => $this->user1->getId(), 'role' => ['id' => $this->role1->getId()], 'locales' => ['de', 'en']], ['id' => 2, 'role' => ['id' => $this->role2->getId()], 'locales' => ['en']]], 'userGroups' => [['group' => ['id' => $this->group1->getId()], 'locales' => ['de', 'en']], ['group' => ['id' => $this->group2->getId()], 'locales' => ['en']]]]); $response = json_decode($client->getResponse()->getContent()); $this->assertEquals('manager', $response->username); $this->assertEquals($this->contact1->getId(), $response->contact->id); $this->assertEquals('en', $response->locale); $this->assertEquals('Role1', $response->userRoles[0]->role->name); $this->assertEquals('de', $response->userRoles[0]->locales[0]); $this->assertEquals('en', $response->userRoles[0]->locales[1]); $this->assertEquals('Role2', $response->userRoles[1]->role->name); $this->assertEquals('en', $response->userRoles[1]->locales[0]); $this->assertEquals('Group1', $response->userGroups[0]->group->name); $this->assertEquals('de', $response->userGroups[0]->locales[0]); $this->assertEquals('en', $response->userGroups[0]->locales[1]); $this->assertEquals('Group2', $response->userGroups[1]->group->name); $this->assertEquals('en', $response->userGroups[1]->locales[0]); $client->request('GET', '/api/users/' . $this->user1->getId()); $response = json_decode($client->getResponse()->getContent()); $this->assertEquals('manager', $response->username); $this->assertEquals($this->contact1->getId(), $response->contact->id); $this->assertEquals('en', $response->locale); $this->assertEquals('Role1', $response->userRoles[0]->role->name); $this->assertEquals('de', $response->userRoles[0]->locales[0]); $this->assertEquals('en', $response->userRoles[0]->locales[1]); $this->assertEquals('Role2', $response->userRoles[1]->role->name); $this->assertEquals('en', $response->userRoles[1]->locales[0]); $this->assertEquals('Group1', $response->userGroups[0]->group->name); $this->assertEquals('de', $response->userGroups[0]->locales[0]); $this->assertEquals('en', $response->userGroups[0]->locales[1]); $this->assertEquals('Group2', $response->userGroups[1]->group->name); $this->assertEquals('en', $response->userGroups[1]->locales[0]); }
public function setUp() { $this->user = new User(); $this->userRole = new UserRole(); $this->role = new Role(); $this->permission = new Permission(); $this->permission->setPermissions(122); $this->permission->setContext('sulu.security.roles'); $this->role->addPermission($this->permission); $this->userRole->setRole($this->role); $this->user->addUserRole($this->userRole); $this->userGroup = new UserGroup(); $this->group = new Group(); $this->role = new Role(); $this->permission = new Permission(); $this->permission->setPermissions(122); $this->permission->setContext('sulu.security.groups'); $this->role->addPermission($this->permission); $this->group->addRole($this->role); $this->userGroup->setGroup($this->group); $this->nestedGroup = new Group(); $this->role = new Role(); $this->permission = new Permission(); $this->permission->setPermissions(122); $this->permission->setContext('sulu.security.groups.nested'); $this->role->addPermission($this->permission); $this->nestedGroup->addRole($this->role); $this->group->addChildren($this->nestedGroup); $this->user->addUserGroup($this->userGroup); $this->token = $this->prophesize(TokenInterface::class); $this->token->getUser()->willReturn($this->user); $this->aclProvider = $this->prophesize(AclProviderInterface::class); $this->aclProvider->findAcl(Argument::any())->willReturn(true); $this->voter = new SecurityContextVoter($this->permissions, $this->aclProvider->reveal()); }
public function testDelete() { $client = $this->createAuthenticatedClient(); $client->request('GET', '/api/groups'); $response = json_decode($client->getResponse()->getContent()); $this->assertEquals(200, $client->getResponse()->getStatusCode()); $this->assertEquals(2, count($response->_embedded->groups)); $client->request('DELETE', '/api/groups/' . $this->group1->getId()); $this->assertEquals(204, $client->getResponse()->getStatusCode()); $client->request('GET', '/api/groups'); $response = json_decode($client->getResponse()->getContent()); $this->assertEquals(200, $client->getResponse()->getStatusCode()); $this->assertEquals(1, count($response->_embedded->groups)); }
/** * Adds the given role to the group. * * @param Group $group * @param array $roleData * * @return bool * * @throws \Sulu\Component\Rest\Exception\EntityNotFoundException */ private function addRole(Group $group, $roleData) { if (isset($roleData['id'])) { $role = $this->get('sulu.repository.role')->findRoleById($roleData['id']); if (!$role) { throw new EntityNotFoundException($this->get('sulu.repository.role')->getClassName(), $roleData['id']); } if (!$group->getRoles()->contains($role)) { $group->addRole($role); } } return true; }
/** * Checks if the given group has the permission to execute the desired task. * * @param SecurityCondition $object * @param int $attribute * @param Group $group * @param array $locales * * @return bool */ public function checkUserGroup($object, $attribute, Group $group, $locales) { // check if the group contains the permission foreach ($group->getRoles() as $role) { /** @var RoleInterface $role */ if ($this->checkPermissions($object, $attribute, $role->getPermissions(), $locales)) { return true; } } // check if one of the child group contains the permission $children = $group->getChildren(); if (!empty($children)) { foreach ($children as $child) { if ($this->checkUserGroup($object, $attribute, $child, $locales)) { return true; } } } return false; }
public function setUp() { $this->em = $this->db('ORM')->getOm(); $this->purgeDatabase(); // email $emailType = new EmailType(); $emailType->setName('Private'); $this->em->persist($emailType); $email = new Email(); $email->setEmail('*****@*****.**'); $email->setEmailType($emailType); $this->em->persist($email); $email2 = new Email(); $email2->setEmail('*****@*****.**'); $email2->setEmailType($emailType); $this->em->persist($email2); // Contact $contact1 = new Contact(); $contact1->setFirstName('Max'); $contact1->setLastName('Muster'); $contact1->addEmail($email); $this->em->persist($contact1); $contact2 = new Contact(); $contact2->setFirstName('Maria'); $contact2->setLastName('Musterfrau'); $contact2->addEmail($email2); $this->em->persist($contact2); $this->em->flush(); $role1 = new Role(); $role1->setName('Role1'); $role1->setSystem('Sulu'); $this->em->persist($role1); $role2 = new Role(); $role2->setName('Role2'); $role2->setSystem('Test'); $this->em->persist($role2); // User 1 $user = new User(); $user->setUsername('admin'); $user->setEmail('*****@*****.**'); $user->setPassword('securepassword'); $user->setPasswordResetToken('mySuperSecretToken'); $user->setSalt('salt'); $user->setLocale('de'); $user->setContact($contact1); $this->em->persist($user); // User 2 $user2 = new User(); $user2->setUsername('test'); $user2->setEmail('*****@*****.**'); $user2->setPassword('securepassword'); $user2->setSalt('salt'); $user2->setLocale('de'); $user2->setContact($contact2); $this->em->persist($user2); $this->em->flush(); $userRole1 = new UserRole(); $userRole1->setRole($role1); $userRole1->setUser($user); $userRole1->setLocale(json_encode(['de', 'en'])); $this->em->persist($userRole1); $userRole2 = new UserRole(); $userRole2->setRole($role2); $userRole2->setUser($user2); $userRole2->setLocale(json_encode(['de', 'en'])); $this->em->persist($userRole2); $permission1 = new Permission(); $permission1->setPermissions(122); $permission1->setRole($role1); $permission1->setContext('Context 1'); $this->em->persist($permission1); $permission2 = new Permission(); $permission2->setPermissions(122); $permission2->setRole($role2); $permission2->setContext('Context 2'); $this->em->persist($permission2); // user groups $group1 = new Group(); $group1->setName('Group1'); $group1->setLft(0); $group1->setRgt(0); $group1->setDepth(0); $this->em->persist($group1); $group2 = new Group(); $group2->setName('Group2'); $group2->setLft(0); $group2->setRgt(0); $group2->setDepth(0); $this->em->persist($group2); $this->em->flush(); }