Created
December 2, 2011 16:04
-
-
Save jmoz/1423762 to your computer and use it in GitHub Desktop.
User
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| namespace JMOZ\Bundle\SecurityBundle\Entity; | |
| use Doctrine\ORM\Mapping as ORM; | |
| use Doctrine\Common\Collections\ArrayCollection; | |
| use Doctrine\Common\Collections\Collection; | |
| use FOS\UserBundle\Model\User as BaseUser; | |
| /** | |
| * User Entity | |
| * | |
| * @ORM\Entity( repositoryClass="JMOZ\Bundle\SecurityBundle\Entity\Repository\UserRepository" ) | |
| * @ORM\Table( name="security_users" ) | |
| * | |
| * @author James Morris <james@jmoz.co.uk> | |
| * @package SecurityBundle | |
| */ | |
| class User extends BaseUser | |
| { | |
| //... existing class members | |
| /** | |
| * @ORM\ManyToMany(targetEntity="Role") | |
| * @ORM\JoinTable(name="security_users_roles") | |
| */ | |
| protected $roles; | |
| public function __construct() | |
| { | |
| parent::__construct(); | |
| $this->roles = new ArrayCollection(); | |
| } | |
| //... existing setters/getters | |
| /** | |
| * Returns an ARRAY of Role objects with the default Role object appended. | |
| * @return array | |
| */ | |
| public function getRoles() | |
| { | |
| return array_merge( $this->roles->toArray(), array( new Role( parent::ROLE_DEFAULT ) ) ); | |
| } | |
| /** | |
| * Returns the true ArrayCollection of Roles. | |
| * @return Doctrine\Common\Collections\ArrayCollection | |
| */ | |
| public function getRolesCollection() | |
| { | |
| return $this->roles; | |
| } | |
| /** | |
| * Pass a string, get the desired Role object or null. | |
| * @param string $role | |
| * @return Role|null | |
| */ | |
| public function getRole( $role ) | |
| { | |
| foreach ( $this->getRoles() as $roleItem ) | |
| { | |
| if ( $role == $roleItem->getRole() ) | |
| { | |
| return $roleItem; | |
| } | |
| } | |
| return null; | |
| } | |
| /** | |
| * Pass a string, checks if we have that Role. Same functionality as getRole() except returns a real boolean. | |
| * @param string $role | |
| * @return boolean | |
| */ | |
| public function hasRole( $role ) | |
| { | |
| if ( $this->getRole( $role ) ) | |
| { | |
| return true; | |
| } | |
| return false; | |
| } | |
| /** | |
| * Adds a Role OBJECT to the ArrayCollection. Can't type hint due to interface so throws Exception. | |
| * @throws Exception | |
| * @param Role $role | |
| */ | |
| public function addRole( $role ) | |
| { | |
| if ( !$role instanceof Role ) | |
| { | |
| throw new \Exception( "addRole takes a Role object as the parameter" ); | |
| } | |
| if ( !$this->hasRole( $role->getRole() ) ) | |
| { | |
| $this->roles->add( $role ); | |
| } | |
| } | |
| /** | |
| * Pass a string, remove the Role object from collection. | |
| * @param string $role | |
| */ | |
| public function removeRole( $role ) | |
| { | |
| $roleElement = $this->getRole( $role ); | |
| if ( $roleElement ) | |
| { | |
| $this->roles->removeElement( $roleElement ); | |
| } | |
| } | |
| /** | |
| * Pass an ARRAY of Role objects and will clear the collection and re-set it with new Roles. | |
| * Type hinted array due to interface. | |
| * @param array $roles Of Role objects. | |
| */ | |
| public function setRoles( array $roles ) | |
| { | |
| $this->roles->clear(); | |
| foreach ( $roles as $role ) | |
| { | |
| $this->addRole( $role ); | |
| } | |
| } | |
| /** | |
| * Directly set the ArrayCollection of Roles. Type hinted as Collection which is the parent of (Array|Persistent)Collection. | |
| * @param Doctrine\Common\Collections\Collection $role | |
| */ | |
| public function setRolesCollection( Collection $collection ) | |
| { | |
| $this->roles = $collection; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment