. */ declare(strict_types=1); namespace App\Entity\UserSystem; 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. */ #[ORM\Entity] #[ORM\Table('`groups`')] #[ORM\Index(name: 'group_idx_name', columns: ['name'])] #[ORM\Index(name: 'group_idx_parent_name', columns: ['parent_id', 'name'])] class Group extends AbstractStructuralDBElement implements HasPermissionsInterface { /** * @var Collection */ #[ORM\OneToMany(targetEntity: 'Group', mappedBy: 'parent')] #[ORM\OrderBy(['name' => 'ASC'])] protected Collection $children; #[ORM\ManyToOne(targetEntity: 'Group', inversedBy: 'children')] #[ORM\JoinColumn(name: 'parent_id')] protected ?AbstractStructuralDBElement $parent; /** * @var Collection */ #[ORM\OneToMany(targetEntity: 'User', mappedBy: 'group')] 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(type: \Doctrine\DBAL\Types\Types::BOOLEAN, name: 'enforce_2fa')] protected bool $enforce2FA = false; /** * @var Collection */ #[Assert\Valid] #[ORM\OneToMany(targetEntity: 'App\Entity\Attachments\GroupAttachment', mappedBy: 'element', cascade: ['persist', 'remove'], orphanRemoval: true)] #[ORM\OrderBy(['name' => 'ASC'])] protected Collection $attachments; /** * @var PermissionData|null * @ValidPermission() */ #[Groups(['full'])] #[ORM\Embedded(class: 'PermissionData', columnPrefix: 'permissions_')] protected ?PermissionData $permissions = null; /** @var Collection */ #[Assert\Valid] #[ORM\OneToMany(targetEntity: 'App\Entity\Parameters\GroupParameter', mappedBy: 'element', cascade: ['persist', 'remove'], orphanRemoval: true)] #[ORM\OrderBy(['group' => 'ASC', 'name' => 'ASC'])] protected Collection $parameters; public function __construct() { $this->attachments = new \Doctrine\Common\Collections\ArrayCollection(); $this->parameters = new \Doctrine\Common\Collections\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 === null) { $this->permissions = new PermissionData(); } return $this->permissions; } public function getUsers(): Collection { return $this->users; } }