Skip to content

Instantly share code, notes, and snippets.

@jmoz
Created December 2, 2011 16:04
Show Gist options
  • Select an option

  • Save jmoz/1423762 to your computer and use it in GitHub Desktop.

Select an option

Save jmoz/1423762 to your computer and use it in GitHub Desktop.
User
<?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