X-Git-Url: https://git.rapsys.eu/userbundle/blobdiff_plain/bab59a4b88a081a7a27a53b4559d74e63b68db92..d5e370cc785ba90e35ad3c97896c62e863fd7b33:/Entity/User.php diff --git a/Entity/User.php b/Entity/User.php index c6a6cdf..cca45c7 100644 --- a/Entity/User.php +++ b/Entity/User.php @@ -3,7 +3,12 @@ // src/Rapsys/UserBundle/Entity/User.php namespace Rapsys\UserBundle\Entity; -class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterface, \Serializable { +use Rapsys\UserBundle\Entity\Group; +use Symfony\Component\Security\Core\User\UserInterface; +use Doctrine\Common\Collections\ArrayCollection; +use Rapsys\UserBundle\Entity\Title; + +class User implements UserInterface, \Serializable { /** * @var integer */ @@ -60,11 +65,11 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac protected $groups; /** - * User constructor. + * Constructor */ public function __construct() { $this->active = false; - $this->groups = new \Doctrine\Common\Collections\ArrayCollection(); + $this->groups = new ArrayCollection(); } /** @@ -180,6 +185,8 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac /** * Get password * + * {@inheritdoc} + * * @return string */ public function getPassword() { @@ -255,7 +262,7 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac /** * Set title */ - public function setTitle($title) { + public function setTitle(Title $title) { $this->title = $title; return $this; @@ -264,7 +271,7 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac /** * Get title */ - public function getTitle() { + public function getTitle(): Title { return $this->title; } @@ -275,7 +282,7 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac * * @return User */ - public function addGroup(\Rapsys\UserBundle\Entity\Group $group) { + public function addGroup(Group $group) { $this->groups[] = $group; return $this; @@ -286,7 +293,7 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac * * @param \Rapsys\UserBundle\Entity\Group $group */ - public function removeGroup(\Rapsys\UserBundle\Entity\Group $group) { + public function removeGroup(Group $group) { $this->groups->removeElement($group); } @@ -299,31 +306,72 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac return $this->groups; } + /** + * {@inheritdoc} + */ public function getRoles() { - return $this->groups->toArray(); + //Get the unique roles list by id + return array_unique(array_reduce( + //Cast groups as array + $this->groups->toArray(), + //Reduce to an array of id => group tuples + function ($array, $group) { + $array[$group->getId()] = $group->getRole(); + return $array; + }, + //Init with ROLE_USER + //XXX: we assume that ROLE_USER has id 1 in database + [ 1 => 'ROLE_USER' ] + )); + } + + public function getRole() { + //Retrieve roles + $roles = $this->getRoles(); + + //Return the role with max id + //XXX: should be rewriten if it change in your configuration + return $roles[array_reduce( + array_keys($roles), + function($cur, $id) { + if ($id > $cur) { + return $id; + } + return $cur; + }, + 0 + )]; } + /** + * {@inheritdoc} + */ public function getSalt() { //No salt required with bcrypt return null; } + /** + * {@inheritdoc} + */ public function getUsername() { return $this->mail; } - public function eraseCredentials() { - } + /** + * {@inheritdoc} + */ + public function eraseCredentials() {} - public function serialize() { - return serialize(array( + public function serialize(): string { + return serialize([ $this->id, $this->mail, $this->password, $this->active, $this->created, $this->updated - )); + ]); } public function unserialize($serialized) { @@ -337,19 +385,17 @@ class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterfac ) = unserialize($serialized); } - public function isAccountNonExpired() { - return true; - } - - public function isAccountNonLocked() { - return true; - } - - public function isCredentialsNonExpired() { - return true; - } - + //XXX: was from vendor/symfony/security-core/User/AdvancedUserInterface.php, see if it's used anymore public function isEnabled() { return $this->active; } + + /** + * Returns a string representation of the user + * + * @return string + */ + public function __toString(): string { + return $this->title.' '.$this->forename.' '.$this->surname; + } }