. */ declare(strict_types=1); namespace App\Entity\UserSystem; use App\Entity\Attachments\Attachment; use App\Validator\Constraints\NoLockout; use Doctrine\DBAL\Types\Types; use App\Entity\Attachments\GroupAttachment; use App\Entity\Base\AbstractStructuralDBElement; use App\Entity\Parameters\GroupParameter; use App\Security\Interfaces\HasPermissionsInterface; use App\Validator\Constraints\ValidPermission; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Serializer\Annotation\Groups; use Symfony\Component\Validator\Constraints as Assert; /** * This entity represents a user group. * * @extends AbstractStructuralDBElement */ #[ORM\Entity] #[ORM\Table('`groups`')] #[ORM\Index(columns: ['name'], name: 'group_idx_name')] #[ORM\Index(columns: ['parent_id', 'name'], name: 'group_idx_parent_name')] #[NoLockout] class Group extends AbstractStructuralDBElement implements HasPermissionsInterface { #[ORM\OneToMany(mappedBy: 'parent', targetEntity: self::class)] #[ORM\OrderBy(['name' => 'ASC'])] protected Collection $children; #[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')] #[ORM\JoinColumn(name: 'parent_id')] protected ?AbstractStructuralDBElement $parent = null; /** * @var Collection */ #[ORM\OneToMany(mappedBy: 'group', targetEntity: User::class)] protected Collection $users; /** * @var bool If true all users associated with this group must have enabled some kind of two-factor authentication */ #[Groups(['extended', 'full', 'import'])] #[ORM\Column(name: 'enforce_2fa', type: Types::BOOLEAN)] protected bool $enforce2FA = false; /** * @var Collection */ #[Assert\Valid] #[ORM\OneToMany(mappedBy: 'element', targetEntity: GroupAttachment::class, cascade: ['persist', 'remove'], orphanRemoval: true)] #[ORM\OrderBy(['name' => 'ASC'])] protected Collection $attachments; #[ORM\ManyToOne(targetEntity: GroupAttachment::class)] #[ORM\JoinColumn(name: 'id_preview_attachment', onDelete: 'SET NULL')] protected ?Attachment $master_picture_attachment = null; #[Groups(['full'])] #[ORM\Embedded(class: PermissionData::class, columnPrefix: 'permissions_')] #[ValidPermission] protected ?PermissionData $permissions = null; /** * @var Collection */ #[Assert\Valid] #[ORM\OneToMany(mappedBy: 'element', targetEntity: GroupParameter::class, cascade: ['persist', 'remove'], orphanRemoval: true)] #[ORM\OrderBy(['group' => 'ASC', 'name' => 'ASC'])] protected Collection $parameters; public function __construct() { $this->attachments = new ArrayCollection(); $this->parameters = new ArrayCollection(); parent::__construct(); $this->permissions = new PermissionData(); $this->users = new ArrayCollection(); $this->children = new ArrayCollection(); } /** * Check if the users of this group are enforced to have two factor authentification (2FA) enabled. */ public function isEnforce2FA(): bool { return $this->enforce2FA; } /** * Sets if the user of this group are enforced to have two factor authentification enabled. * * @param bool $enforce2FA true, if the users of this group are enforced to have 2FA enabled * * @return $this */ public function setEnforce2FA(bool $enforce2FA): self { $this->enforce2FA = $enforce2FA; return $this; } public function getPermissions(): PermissionData { if (!$this->permissions instanceof PermissionData) { $this->permissions = new PermissionData(); } return $this->permissions; } public function getUsers(): Collection { return $this->users; } }