diff --git a/DataFixtures/ORM/LoadCenters.php b/DataFixtures/ORM/LoadCenters.php
index e1a7f0873..d0bb7178f 100644
--- a/DataFixtures/ORM/LoadCenters.php
+++ b/DataFixtures/ORM/LoadCenters.php
@@ -39,21 +39,30 @@ class LoadCenters extends AbstractFixture implements OrderedFixtureInterface
return 100;
}
+ public static $centers = array(
+ array(
+ 'name' => 'Center A',
+ 'ref' => 'centerA'
+ ),
+ array(
+ 'name' => 'Center B',
+ 'ref' => 'centerB'
+ )
+ );
+
+ public static $refs = array();
+
public function load(ObjectManager $manager)
{
- $centerA = new Center();
- $centerA->setName('Center A');
-
- $manager->persist($centerA);
- $this->addReference('centerA', $centerA);
-
- $centerB = new Center();
- $centerB->setName('center B');
-
- $manager->persist($centerB);
- $this->addReference('centerB', $centerB);
+ foreach (static::$centers as $new) {
+ $centerA = new Center();
+ $centerA->setName($new['name']);
+
+ $manager->persist($centerA);
+ $this->addReference($new['ref'], $centerA);
+ static::$refs[] = $new['ref'];
+ }
$manager->flush();
-
}
}
diff --git a/DataFixtures/ORM/LoadGroupCenters.php b/DataFixtures/ORM/LoadGroupCenters.php
new file mode 100644
index 000000000..04a34d080
--- /dev/null
+++ b/DataFixtures/ORM/LoadGroupCenters.php
@@ -0,0 +1,63 @@
+
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+namespace Chill\MainBundle\DataFixtures\ORM;
+
+use Doctrine\Common\DataFixtures\AbstractFixture;
+use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
+use Doctrine\Common\Persistence\ObjectManager;
+use Chill\MainBundle\Entity\GroupCenter;
+use Chill\MainBundle\DataFixtures\ORM\LoadCenters;
+use Chill\MainBundle\DataFixtures\ORM\LoadPermissionsGroup;
+
+/**
+ *
+ *
+ * @author Julien Fastré
+ */
+class LoadGroupCenters extends AbstractFixture implements OrderedFixtureInterface
+{
+ public function getOrder()
+ {
+ return 500;
+ }
+
+ public static $refs = array();
+
+ public function load(ObjectManager $manager)
+ {
+ foreach (LoadCenters::$refs as $centerRef) {
+ foreach (LoadPermissionsGroup::$refs as $permissionGroupRef) {
+ $GroupCenter = new GroupCenter();
+ $GroupCenter->setCenter($this->getReference($centerRef));
+ $GroupCenter->addPermissionGroup($this->getReference($permissionGroupRef));
+
+ $manager->persist($GroupCenter);
+
+ $reference = $centerRef.'_'.$permissionGroupRef;
+ $this->addReference($reference, $GroupCenter);
+ static::$refs[] = $reference;
+ echo "Creating $reference... \n";
+ }
+ }
+
+ $manager->flush();
+ }
+}
diff --git a/DataFixtures/ORM/LoadPermissionsGroup.php b/DataFixtures/ORM/LoadPermissionsGroup.php
new file mode 100644
index 000000000..b2ed78934
--- /dev/null
+++ b/DataFixtures/ORM/LoadPermissionsGroup.php
@@ -0,0 +1,87 @@
+
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+namespace Chill\MainBundle\DataFixtures\ORM;
+
+use Doctrine\Common\DataFixtures\AbstractFixture;
+use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
+use Doctrine\Common\Persistence\ObjectManager;
+use Chill\MainBundle\Entity\PermissionsGroup;
+
+/**
+ *
+ *
+ * @author Julien Fastré
+ */
+class LoadPermissionsGroup extends AbstractFixture implements OrderedFixtureInterface
+{
+ public function getOrder()
+ {
+ return 400;
+ }
+
+ public static $permissionGroup = array(
+ array(
+ 'name' => 'social',
+ 'role_scopes' => array(
+ 'role_scope_CHILL_FOO_EDIT_social',
+ 'role_scope_CHILL_FOO_SEE_administrative',
+ "role_scope_CHILL_FOO_EDIT_all"
+ )
+ ),
+ array(
+ 'name' => 'administrative',
+ 'role_scopes' => array(
+ "role_scope_CHILL_FOO_SEE_social",
+ "role_scope_CHILL_FOO_EDIT_administrative",
+ "role_scope_CHILL_FOO_EDIT_all"
+ )
+ ),
+ array(
+ 'name' => 'direction',
+ 'role_scopes' => array(
+ "role_scope_CHILL_FOO_EDIT_all",
+ "role_scope_CHILL_FOO_SEE_DETAILS_social",
+ "role_scope_CHILL_FOO_SEE_DETAILS_administrative"
+ )
+ )
+ );
+
+ public static $refs = array();
+
+ public function load(ObjectManager $manager)
+ {
+ foreach (static::$permissionGroup as $new) {
+ $permissionGroup = new PermissionsGroup();
+ $permissionGroup->setName($new['name']);
+ foreach ($new['role_scopes'] as $roleScopeRef) {
+ $permissionGroup->addRoleScope($this->getReference($roleScopeRef));
+ }
+
+ $manager->persist($permissionGroup);
+ $reference = 'permission_group_'.$new['name'];
+ echo "Creating $reference \n";
+ $this->setReference($reference, $permissionGroup);
+ static::$refs[] = $reference;
+ }
+
+ $manager->flush();
+ }
+}
diff --git a/DataFixtures/ORM/LoadRoleScopes.php b/DataFixtures/ORM/LoadRoleScopes.php
index a6330bcb9..9693576d6 100644
--- a/DataFixtures/ORM/LoadRoleScopes.php
+++ b/DataFixtures/ORM/LoadRoleScopes.php
@@ -46,6 +46,13 @@ class LoadRoleScopes extends AbstractFixture implements OrderedFixtureInterface
'nl' => 'zie foo'
)
),
+ 'CHILL_FOO_SEE_DETAILS' => array(
+ 'names' => array(
+ 'fr' => 'voir foo avec détails',
+ 'en' => 'see foo with details',
+ 'nl' => 'zie foo in details'
+ )
+ ),
'CHILL_FOO_EDIT' => array(
'names' => array(
'fr' => 'modifier foo',
@@ -66,7 +73,7 @@ class LoadRoleScopes extends AbstractFixture implements OrderedFixtureInterface
->setScope($this->getReference($scopeReference))
;
$reference = 'role_scope_'.$key.'_'.$this->getReference($scopeReference)->getName()['en'];
- var_dump($reference);
+ echo "Creating $reference \n";
$this->addReference($reference, $roleScope);
$manager->persist($roleScope);
static::$references[] = $reference;
diff --git a/DataFixtures/ORM/LoadUsers.php b/DataFixtures/ORM/LoadUsers.php
index 222b8d03d..df5ca2100 100644
--- a/DataFixtures/ORM/LoadUsers.php
+++ b/DataFixtures/ORM/LoadUsers.php
@@ -7,15 +7,20 @@ use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
+use Chill\MainBundle\DataFixtures\ORM\LoadCenters;
+use Chill\MainBundle\DataFixtures\ORM\LoadPermissionsGroup;
+use Chill\MainBundle\Entity\User;
/**
- * Load agents into database
+ * Load fixtures users into database
+ *
+ * create a user for each permission_group and center.
+ * username and password are identicals.
*
* @author Julien Fastré
*/
-class LoadUsers extends AbstractFixture implements ContainerAwareInterface
+class LoadUsers extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface
{
-
/**
*
* @var ContainerInterface
@@ -26,15 +31,42 @@ class LoadUsers extends AbstractFixture implements ContainerAwareInterface
{
return 1000;
}
-
- public function setContainer(ContainerInterface $container = null)
- {
- $this->container = $container;
- }
+
+ public static $refs = array();
public function load(ObjectManager $manager)
{
+ foreach(LoadCenters::$refs as $centerRef) {
+ foreach(LoadPermissionsGroup::$refs as $permissionGroupRef) {
+ $user = new User();
+
+ $permissionGroup = $this->getReference($permissionGroupRef);
+ $center = $this->getReference($centerRef);
+ $username = $center->getName().'_'.$permissionGroup->getName();
+
+ $user->setUsername($username)
+ ->setPassword($this->container->get('security.encoder_factory')
+ ->getEncoder($user)
+ ->encodePassword($username, $user->getSalt()));
+ $user->addGroupCenter($this->getReference($centerRef.'_'.$permissionGroupRef));
+
+ $manager->persist($user);
+ $this->addReference($username, $user);
+ static::$refs[] = $user->getUsername();
+ echo "Creating user with username ".$user->getUsername()."... \n";
+ }
+ }
+ $manager->flush();
+ }
+
+ public function setContainer(ContainerInterface $container = null)
+ {
+ if (NULL === $container) {
+ throw new \LogicException('$container should not be null');
+ }
+
+ $this->container = $container;
}
}
diff --git a/Entity/Center.php b/Entity/Center.php
index 75edd18c4..fddb54441 100644
--- a/Entity/Center.php
+++ b/Entity/Center.php
@@ -39,6 +39,17 @@ class Center
*/
private $id;
+ /**
+ *
+ * @var \Doctrine\Common\Collections\Collection
+ */
+ private $groupCenters;
+
+ public function __construct()
+ {
+ $this->groupCenters = new \Doctrine\Common\Collections\ArrayCollection();
+ }
+
public function getName()
{
return $this->name;
@@ -54,6 +65,17 @@ class Center
{
return $this->id;
}
+
+ public function getGroupCenters()
+ {
+ return $this->groupCenters;
+ }
+
+ public function addGroupCenter(GroupCenter $groupCenter)
+ {
+ $this->groupCenters->add($groupCenter);
+ return $this;
+ }
}
diff --git a/Entity/GroupCenter.php b/Entity/GroupCenter.php
new file mode 100644
index 000000000..d882ab526
--- /dev/null
+++ b/Entity/GroupCenter.php
@@ -0,0 +1,118 @@
+
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+namespace Chill\MainBundle\Entity;
+
+use Chill\MainBundle\Entity\Center;
+use Chill\MainBundle\Entity\PermissionsGroup;
+use Doctrine\Common\Collections\Collection;
+use Doctrine\Common\Collections\ArrayCollection;
+
+/**
+ *
+ *
+ * @author Julien Fastré
+ */
+class GroupCenter
+{
+ /**
+ *
+ * @var int
+ */
+ private $id;
+
+ /**
+ *
+ * @var Center
+ */
+ private $center;
+
+ /**
+ *
+ * @var Collection
+ */
+ private $users;
+
+ /**
+ *
+ * @var Collection
+ */
+ private $permissionGroups;
+
+ public function __construct()
+ {
+ $this->permissionGroups = new ArrayCollection();
+ $this->users = new ArrayCollection();
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ *
+ * @return Center
+ */
+ public function getCenter()
+ {
+ return $this->center;
+ }
+
+ /**
+ *
+ * @return PermissionGroup[]
+ */
+ public function getPermissionGroups()
+ {
+ return $this->permissionGroups;
+ }
+
+ /**
+ *
+ * @param Center $center
+ * @return \Chill\MainBundle\Entity\GroupCenter
+ */
+ public function setCenter(Center $center)
+ {
+ $this->center = $center;
+ return $this;
+ }
+
+ /**
+ *
+ * @param PermissionGroup $permission
+ * @return \Chill\MainBundle\Entity\GroupCenter
+ */
+ public function addPermissionGroup(PermissionsGroup $permission)
+ {
+ $this->permissionGroups->add($permission);
+ return $this;
+ }
+
+ public function getUsers()
+ {
+ return $this->users;
+ }
+
+
+
+
+}
diff --git a/Entity/PermissionGroup.php b/Entity/PermissionsGroup.php
similarity index 93%
rename from Entity/PermissionGroup.php
rename to Entity/PermissionsGroup.php
index cf2b76b05..c3f78fcb0 100644
--- a/Entity/PermissionGroup.php
+++ b/Entity/PermissionsGroup.php
@@ -29,7 +29,7 @@ use Chill\MainBundle\Entity\RoleScope;
*
* @author Julien Fastré
*/
-class PermissionGroup
+class PermissionsGroup
{
/**
*
@@ -39,7 +39,7 @@ class PermissionGroup
/**
*
- * @var array
+ * @var string
*/
private $name;
@@ -59,6 +59,10 @@ class PermissionGroup
return $this->id;
}
+ /**
+ *
+ * @return string
+ */
public function getName()
{
return $this->name;
@@ -69,7 +73,7 @@ class PermissionGroup
return $this->roleScopes;
}
- public function setName(array $name)
+ public function setName($name)
{
$this->name = $name;
return $this;
diff --git a/Entity/User.php b/Entity/User.php
index 1eeac1060..76c3f4316 100644
--- a/Entity/User.php
+++ b/Entity/User.php
@@ -2,14 +2,14 @@
namespace Chill\MainBundle\Entity;
-
-use Doctrine\ORM\Mapping as ORM;
-use Symfony\Component\Security\Core\User\UserInterface;
+use Symfony\Component\Security\Core\User\AdvancedUserInterface;
+use Doctrine\Common\Collections\Collection;
+use Doctrine\Common\Collections\ArrayCollection;
/**
* User
*/
-class User implements UserInterface {
+class User implements AdvancedUserInterface {
/**
* @var integer
@@ -21,14 +21,43 @@ class User implements UserInterface {
*/
private $username;
+ /**
+ *
+ * @var string
+ */
private $password;
- private $salt;
+ /**
+ *
+ * @var string
+ * @internal must be set to null if we use bcrypt
+ */
+ private $salt = null;
+
+ /**
+ *
+ * @var boolean
+ */
+ private $locked = false;
+
+ /**
+ *
+ * @var boolean
+ */
+ private $enabled = true;
+
+ /**
+ *
+ * @var Collection
+ */
+ private $groupCenters;
+
+ public function __construct()
+ {
+ $this->groupCenters = new ArrayCollection();
+ }
-
-
-
/**
* Get id
*
@@ -51,16 +80,6 @@ class User implements UserInterface {
return $this;
}
-
- /**
- * Get name
- *
- * @return string
- */
- public function getName()
- {
- return $this->username;
- }
public function __toString() {
return $this->getUsername();
@@ -71,6 +90,10 @@ class User implements UserInterface {
}
+ /**
+ *
+ * @return string
+ */
public function getPassword()
{
return $this->password;
@@ -93,7 +116,7 @@ class User implements UserInterface {
function setPassword($password)
{
- $this->password = $password;
+ $this->password = $password;
return $this;
}
@@ -103,6 +126,63 @@ class User implements UserInterface {
return $this;
}
+ /**
+ * {@inheritdoc}
+ *
+ * @return boolean
+ */
+ public function isAccountNonExpired()
+ {
+ return false;
+ }
+ /**
+ * {@inheritdoc}
+ *
+ */
+ public function isAccountNonLocked()
+ {
+ return $this->locked;
+ }
+
+ /**
+ * {@inheritdoc}
+ *
+ * @return boolean
+ */
+ public function isCredentialsNonExpired()
+ {
+ return true;
+ }
+
+ /**
+ * {@inheritdoc}
+ *
+ * @return boolean
+ */
+ public function isEnabled()
+ {
+ return $this->enabled;
+ }
+
+ /**
+ *
+ * @return GroupCenter[]
+ */
+ public function getGroupCenters()
+ {
+ return $this->groupCenters;
+ }
+
+ /**
+ *
+ * @param \Chill\MainBundle\Entity\GroupCenter $groupCenter
+ * @return \Chill\MainBundle\Entity\User
+ */
+ public function addGroupCenter(GroupCenter $groupCenter)
+ {
+ $this->groupCenters->add($groupCenter);
+ return $this;
+ }
}
diff --git a/Resources/config/doctrine/Center.orm.yml b/Resources/config/doctrine/Center.orm.yml
index 491495faf..8ac4355cc 100644
--- a/Resources/config/doctrine/Center.orm.yml
+++ b/Resources/config/doctrine/Center.orm.yml
@@ -10,4 +10,8 @@ Chill\MainBundle\Entity\Center:
fields:
name:
type: string
- length: 255
\ No newline at end of file
+ length: 255
+ oneToMany:
+ groupCenters:
+ targetEntity: Chill\MainBundle\Entity\GroupCenter
+ mappedBy: groupCenters
\ No newline at end of file
diff --git a/Resources/config/doctrine/GroupCenter.orm.yml b/Resources/config/doctrine/GroupCenter.orm.yml
new file mode 100644
index 000000000..37a7a81f5
--- /dev/null
+++ b/Resources/config/doctrine/GroupCenter.orm.yml
@@ -0,0 +1,16 @@
+Chill\MainBundle\Entity\GroupCenter:
+ type: entity
+ table: group_centers
+ id:
+ id:
+ type: integer
+ id: true
+ generator:
+ strategy: AUTO
+ manyToOne:
+ center:
+ targetEntity: Chill\MainBundle\Entity\Center
+ inversedBy: groupCenters
+ manyToMany:
+ permissionGroups:
+ targetEntity: Chill\MainBundle\Entity\PermissionsGroup
\ No newline at end of file
diff --git a/Resources/config/doctrine/PermissionGroup.orm.yml b/Resources/config/doctrine/PermissionsGroup.orm.yml
similarity index 76%
rename from Resources/config/doctrine/PermissionGroup.orm.yml
rename to Resources/config/doctrine/PermissionsGroup.orm.yml
index f7c7de5ec..c0ebe69fc 100644
--- a/Resources/config/doctrine/PermissionGroup.orm.yml
+++ b/Resources/config/doctrine/PermissionsGroup.orm.yml
@@ -1,4 +1,4 @@
-Chill\MainBundle\Entity\PermissionGroup:
+Chill\MainBundle\Entity\PermissionsGroup:
type: entity
table: permission_groups
id:
@@ -9,7 +9,8 @@ Chill\MainBundle\Entity\PermissionGroup:
strategy: AUTO
fields:
name:
- type: json_array
+ type: string
+ length: 255
manyToMany:
roleScopes:
targetEntity: Chill\MainBundle\Entity\RoleScope
diff --git a/Resources/config/doctrine/RoleScope.orm.yml b/Resources/config/doctrine/RoleScope.orm.yml
index 32ecd4f86..4ab688b7b 100644
--- a/Resources/config/doctrine/RoleScope.orm.yml
+++ b/Resources/config/doctrine/RoleScope.orm.yml
@@ -11,7 +11,7 @@ Chill\MainBundle\Entity\RoleScope:
role:
type: string
length: 255
- oneToMany:
+ manyToOne:
scope:
targetEntity: Chill\MainBundle\Entity\Scope
- mappedBy: roleScopes
\ No newline at end of file
+ inversedBy: roleScopes
\ No newline at end of file
diff --git a/Resources/config/doctrine/User.orm.yml b/Resources/config/doctrine/User.orm.yml
index 7edb8230a..924b85ac1 100644
--- a/Resources/config/doctrine/User.orm.yml
+++ b/Resources/config/doctrine/User.orm.yml
@@ -17,5 +17,15 @@ Chill\MainBundle\Entity\User:
salt:
type: string
length: 255
+ nullable: true
+ enabled:
+ type: boolean
+ default: true
+ locked:
+ type: boolean
+ default: false
+ manyToMany:
+ groupCenters:
+ targetEntity: Chill\MainBundle\Entity\GroupCenter