コード例 #1
0
ファイル: UserServiceTest.php プロジェクト: modera/foundation
 public function testGetByRole()
 {
     $user1 = new User();
     $user2 = new User();
     $user3 = new User();
     $user1->setUsername('user1');
     $user1->setPassword('pwd1');
     $user1->setEmail('*****@*****.**');
     $user2->setUsername('user2');
     $user2->setPassword('pwd2');
     $user2->setEmail('*****@*****.**');
     $user3->setUsername('user3');
     $user3->setPassword('pwd3');
     $user3->setEmail('*****@*****.**');
     $permission1 = new Permission();
     $permission2 = new Permission();
     $permission1->setRoleName('ROLE_USER');
     $permission1->addUser($user1);
     $permission2->setRoleName('ROLE_ADMIN');
     $permission2->addUser($user2);
     $group1 = new Group();
     $group2 = new Group();
     $group1->setName('User');
     $group1->addPermission($permission1);
     $group1->addUser($user3);
     $group2->setName('Admin');
     $group2->addPermission($permission2);
     $group2->addUser($user3);
     self::$em->persist($user1);
     self::$em->persist($user2);
     self::$em->persist($user3);
     self::$em->persist($permission1);
     self::$em->persist($permission2);
     self::$em->persist($group1);
     self::$em->persist($group2);
     self::$em->flush();
     $rootUserHandler = \Phake::mock('Modera\\SecurityBundle\\RootUserHandling\\RootUserHandlerInterface');
     $service = new UserService(self::$em, $rootUserHandler);
     $this->assertEquals(array($user1, $user3), $service->getUsersByRole('ROLE_USER'));
     $this->assertEquals(array($user2, $user3), $service->getUsersByRole('ROLE_ADMIN'));
     $this->assertEquals(array($user1->getId(), $user3->getId()), $service->getIdsByRole('ROLE_USER'));
     $this->assertEquals(array($user2->getId(), $user3->getId()), $service->getIdsByRole('ROLE_ADMIN'));
 }
コード例 #2
0
ファイル: UserTest.php プロジェクト: modera/foundation
 public function testGetRawRoles()
 {
     $user = new User();
     $this->assertEquals(0, count($user->getRawRoles()));
     // ---
     $groupPermission = \Phake::mock(Permission::clazz());
     $userPermission = \Phake::mock(Permission::clazz());
     $group = \Phake::mock(Group::clazz());
     \Phake::when($group)->getPermissions()->thenReturn([$groupPermission]);
     $user->addPermission($userPermission);
     $user->setGroups([$group]);
     $userRoles = $user->getRawRoles();
     $this->assertEquals(2, count($userRoles));
     $this->assertSame($groupPermission, $userRoles[0]);
     $this->assertSame($userPermission, $userRoles[1]);
 }
コード例 #3
0
 /**
  * @return array
  */
 public function getConfig()
 {
     $em = $this->getDoctrine();
     $groupEntityValidator = function (array $params, Group $group, DefaultEntityValidator $defaultValidator, array $config, ContainerInterface $container) use($em) {
         $validationResult = $defaultValidator->validate($group, $config);
         if (!$group->getRefName()) {
             return $validationResult;
         }
         /** @var Group[] $groupWithSuchRefNameList */
         $groupWithSuchRefNameList = $em->getRepository(Group::clazz())->findByRefName($group->getRefName());
         if (count($groupWithSuchRefNameList) > 0) {
             $groupWithSuchRefName = $groupWithSuchRefNameList[0];
             if ($groupWithSuchRefName->getId() != $group->getId()) {
                 $validationResult->addFieldError('refName', T::trans('This refName is taken. Consider use \'%groupName%\' group or change current reference name.', array('%groupName%' => $groupWithSuchRefName->getName())));
             }
         }
         return $validationResult;
     };
     $mapEntity = function (array $params, Group $group, DataMapperInterface $defaultMapper, ContainerInterface $container) {
         $defaultMapper->mapData($params, $group);
         /*
          * Because of unique constrain we cannot save '' value as refName.
          * Only one time can, actually. :) So, to allow user use groups without
          * refName we have to set null by force because of ExtJs empty form value
          * is ''.
          */
         $refName = $group->getRefName();
         if ($refName === '') {
             $group->setRefName(null);
         } else {
             /*
              * To help users avoid duplicates group we use normalizing for refName
              */
             $group->setRefName(Group::normalizeRefNameString($refName));
         }
     };
     return array('entity' => Group::clazz(), 'security' => array('role' => ModeraBackendSecurityBundle::ROLE_ACCESS_BACKEND_TOOLS_SECURITY_SECTION, 'actions' => array('create' => ModeraBackendSecurityBundle::ROLE_MANAGE_PERMISSIONS, 'update' => ModeraBackendSecurityBundle::ROLE_MANAGE_PERMISSIONS, 'remove' => ModeraBackendSecurityBundle::ROLE_MANAGE_PERMISSIONS)), 'hydration' => array('groups' => array('list' => function (Group $group) {
         return array('id' => $group->getId(), 'name' => $group->getName(), 'usersCount' => count($group->getUsers()));
     }, 'delete-group' => ['name'], 'main-form' => ['id', 'name', 'refName'], 'compact-list' => ['id', 'name']), 'profiles' => array('list', 'compact-list', 'delete-group', 'edit-group' => array('main-form'))), 'format_new_entity_values' => function (array $params, array $config, NewValuesFactoryInterface $defaultImpl, ContainerInterface $container) {
         return array('refName' => null);
     }, 'new_entity_validator' => $groupEntityValidator, 'updated_entity_validator' => $groupEntityValidator, 'map_data_on_create' => $mapEntity, 'map_data_on_update' => $mapEntity);
 }
コード例 #4
0
 /**
  * Db Tables used in test.
  *
  * @return array
  */
 private static function getTableClasses()
 {
     return array(Group::clazz());
 }
コード例 #5
0
ファイル: GroupTest.php プロジェクト: modera/foundation
 public function testNormalizeRefNameString()
 {
     $this->assertEquals('QWERTY', Group::normalizeRefNameString('qwerty'));
     $this->assertEquals('QT', Group::normalizeRefNameString('!1q34%^&* ~@342T'));
 }
コード例 #6
0
ファイル: UserService.php プロジェクト: modera/foundation
 /**
  * @param $roleName
  *
  * @return array
  */
 public function getIdsByRole($roleName)
 {
     $ids = array();
     $qb = $this->em->createQueryBuilder();
     $qb->select('p, u, g')->from(Permission::clazz(), 'p')->leftJoin('p.users', 'u')->leftJoin('p.groups', 'g')->where($qb->expr()->eq('p.roleName', ':roleName'))->setParameter('roleName', $roleName);
     $query = $qb->getQuery();
     $permission = $query->getOneOrNullResult($query::HYDRATE_ARRAY);
     if ($permission) {
         foreach ($permission['users'] as $u) {
             $ids[] = $u['id'];
         }
         $groupIds = array();
         foreach ($permission['groups'] as $g) {
             $groupIds[] = $g['id'];
         }
         if (count($groupIds)) {
             $qb = $this->em->createQueryBuilder();
             $qb->select('g, u')->from(Group::clazz(), 'g')->leftJoin('g.users', 'u')->where($qb->expr()->in('g.id', $groupIds));
             $groups = $qb->getQuery()->getArrayResult();
             foreach ($groups as $g) {
                 foreach ($g['users'] as $u) {
                     $ids[] = $u['id'];
                 }
             }
         }
     }
     return array_keys(array_flip($ids));
 }
コード例 #7
0
 /**
  * @return array
  */
 private static function getTablesClasses()
 {
     return array(Permission::clazz(), PermissionCategory::clazz(), User::clazz(), Group::clazz(), Activity::clazz());
 }
コード例 #8
0
ファイル: User.php プロジェクト: modera/foundation
 /**
  * @param Group $group
  *
  * @return bool
  */
 public function addToGroup(Group $group)
 {
     if (!$group->hasUser($this)) {
         $group->addUser($this);
         return true;
     }
     return false;
 }
コード例 #9
0
 /**
  * @return array
  */
 public function getConfig()
 {
     return array('entity' => Group::clazz(), 'security' => array('role' => ModeraBackendSecurityBundle::ROLE_ACCESS_BACKEND_TOOLS_SECURITY_SECTION, 'actions' => array('create' => ModeraBackendSecurityBundle::ROLE_MANAGE_PERMISSIONS, 'update' => ModeraBackendSecurityBundle::ROLE_MANAGE_PERMISSIONS, 'remove' => ModeraBackendSecurityBundle::ROLE_MANAGE_PERMISSIONS)), 'hydration' => array('groups' => array('list' => function (Group $group) {
         return array('id' => $group->getId(), 'name' => $group->getName(), 'usersCount' => count($group->getUsers()));
     }, 'delete-group' => ['name'], 'main-form' => ['id', 'name'], 'compact-list' => ['id', 'name']), 'profiles' => array('list', 'compact-list', 'delete-group', 'edit-group' => array('main-form'))));
 }