Spaces:
No application file
No application file
| namespace Mautic\UserBundle\Entity; | |
| use Doctrine\Common\Collections\ArrayCollection; | |
| use Doctrine\ORM\Mapping as ORM; | |
| use Mautic\ApiBundle\Serializer\Driver\ApiMetadataDriver; | |
| use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder; | |
| use Mautic\CoreBundle\Entity\CacheInvalidateInterface; | |
| use Mautic\CoreBundle\Entity\FormEntity; | |
| use Symfony\Component\Validator\Constraints as Assert; | |
| use Symfony\Component\Validator\Mapping\ClassMetadata; | |
| class Role extends FormEntity implements CacheInvalidateInterface | |
| { | |
| public const CACHE_NAMESPACE = 'Role'; | |
| /** | |
| * @var int | |
| */ | |
| private $id; | |
| /** | |
| * @var string | |
| */ | |
| private $name; | |
| /** | |
| * @var string|null | |
| */ | |
| private $description; | |
| /** | |
| * @var bool | |
| */ | |
| private $isAdmin = false; | |
| /** | |
| * @var ArrayCollection<int, \Mautic\UserBundle\Entity\Permission> | |
| */ | |
| private $permissions; | |
| /** | |
| * @var array | |
| */ | |
| private $rawPermissions; | |
| /** | |
| * @var ArrayCollection<int, \Mautic\UserBundle\Entity\User> | |
| */ | |
| private $users; | |
| public function __construct() | |
| { | |
| $this->permissions = new ArrayCollection(); | |
| $this->users = new ArrayCollection(); | |
| } | |
| public static function loadMetadata(ORM\ClassMetadata $metadata): void | |
| { | |
| $builder = new ClassMetadataBuilder($metadata); | |
| $builder->setTable('roles') | |
| ->setCustomRepositoryClass(RoleRepository::class); | |
| $builder->addIdColumns(); | |
| $builder->createField('isAdmin', 'boolean') | |
| ->columnName('is_admin') | |
| ->build(); | |
| $builder->createOneToMany('permissions', 'Permission') | |
| ->orphanRemoval() | |
| ->mappedBy('role') | |
| ->cascadePersist() | |
| ->cascadeRemove() | |
| ->fetchExtraLazy() | |
| ->build(); | |
| $builder->createField('rawPermissions', 'array') | |
| ->columnName('readable_permissions') | |
| ->build(); | |
| $builder->createOneToMany('users', 'User') | |
| ->mappedBy('role') | |
| ->fetchExtraLazy() | |
| ->build(); | |
| } | |
| public static function loadValidatorMetadata(ClassMetadata $metadata): void | |
| { | |
| $metadata->addPropertyConstraint('name', new Assert\NotBlank( | |
| ['message' => 'mautic.core.name.required'] | |
| )); | |
| } | |
| /** | |
| * Prepares the metadata for API usage. | |
| */ | |
| public static function loadApiMetadata(ApiMetadataDriver $metadata): void | |
| { | |
| $metadata->setGroupPrefix('role') | |
| ->addListProperties( | |
| [ | |
| 'id', | |
| 'name', | |
| 'description', | |
| 'isAdmin', | |
| 'rawPermissions', | |
| ] | |
| ) | |
| ->build(); | |
| } | |
| /** | |
| * Get id. | |
| * | |
| * @return int | |
| */ | |
| public function getId() | |
| { | |
| return $this->id; | |
| } | |
| /** | |
| * Set name. | |
| * | |
| * @param string $name | |
| * | |
| * @return Role | |
| */ | |
| public function setName($name) | |
| { | |
| $this->isChanged('name', $name); | |
| $this->name = $name; | |
| return $this; | |
| } | |
| /** | |
| * Get name. | |
| * | |
| * @return string | |
| */ | |
| public function getName() | |
| { | |
| return $this->name; | |
| } | |
| /** | |
| * Add permissions. | |
| * | |
| * @return Role | |
| */ | |
| public function addPermission(Permission $permissions) | |
| { | |
| $permissions->setRole($this); | |
| $this->permissions[] = $permissions; | |
| return $this; | |
| } | |
| /** | |
| * Remove permissions. | |
| */ | |
| public function removePermission(Permission $permissions): void | |
| { | |
| $this->permissions->removeElement($permissions); | |
| } | |
| /** | |
| * Get permissions. | |
| * | |
| * @return \Doctrine\Common\Collections\Collection | |
| */ | |
| public function getPermissions() | |
| { | |
| return $this->permissions; | |
| } | |
| /** | |
| * Set description. | |
| * | |
| * @param string $description | |
| * | |
| * @return Role | |
| */ | |
| public function setDescription($description) | |
| { | |
| $this->isChanged('description', $description); | |
| $this->description = $description; | |
| return $this; | |
| } | |
| /** | |
| * Get description. | |
| * | |
| * @return string | |
| */ | |
| public function getDescription() | |
| { | |
| return $this->description; | |
| } | |
| /** | |
| * Set isAdmin. | |
| * | |
| * @param bool $isAdmin | |
| * | |
| * @return Role | |
| */ | |
| public function setIsAdmin($isAdmin) | |
| { | |
| $this->isChanged('isAdmin', $isAdmin); | |
| $this->isAdmin = $isAdmin; | |
| return $this; | |
| } | |
| /** | |
| * Get isAdmin. | |
| * | |
| * @return bool | |
| */ | |
| public function getIsAdmin() | |
| { | |
| return $this->isAdmin; | |
| } | |
| /** | |
| * Get isAdmin. | |
| * | |
| * @return bool | |
| */ | |
| public function isAdmin() | |
| { | |
| return $this->getIsAdmin(); | |
| } | |
| /** | |
| * Simply used to store a readable format of permissions for the changelog. | |
| */ | |
| public function setRawPermissions(array $permissions): void | |
| { | |
| $this->isChanged('rawPermissions', $permissions); | |
| $this->rawPermissions = $permissions; | |
| } | |
| /** | |
| * Get rawPermissions. | |
| * | |
| * @return array | |
| */ | |
| public function getRawPermissions() | |
| { | |
| return $this->rawPermissions; | |
| } | |
| /** | |
| * Add users. | |
| * | |
| * @return Role | |
| */ | |
| public function addUser(User $users) | |
| { | |
| $this->users[] = $users; | |
| return $this; | |
| } | |
| /** | |
| * Remove users. | |
| */ | |
| public function removeUser(User $users): void | |
| { | |
| $this->users->removeElement($users); | |
| } | |
| /** | |
| * Get users. | |
| * | |
| * @return \Doctrine\Common\Collections\Collection | |
| */ | |
| public function getUsers() | |
| { | |
| return $this->users; | |
| } | |
| public function getCacheNamespacesToDelete(): array | |
| { | |
| return [ | |
| self::CACHE_NAMESPACE, | |
| User::CACHE_NAMESPACE, | |
| ]; | |
| } | |
| } | |