<?php
namespace App\Entity;
use App\Repository\UserGlobalPasswordAccessRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* "GLOBAL SIFRE" yetkisi — bu kullanicinin KENDI sifresi, secili serviste
* BASKA kullanicilarin hesabina giris yapmak icin de gecerlidir.
*
* Ornek: Fatih'e `self` (ERP) satiri verilirse, Fatih ERP giris ekranina
* Daniel'in e-postasini + KENDI sifresini yazarak Daniel olarak girer. Amac
* diger kullanicilarin ekranini/tepkisini gorebilmektir.
*
* BU TABLO `user_service_access` DEGILDIR — orasi "bu kullanici bu servise
* KENDI adina girebilir mi" sorusunu cevaplar. Burasi bambaska bir eksendir:
* "bu kullanicinin sifresi bu serviste HERKESIN kapisini acar mi". Ikisi ayni
* satirda tutulmaz; tutulsaydi impersonation yetkisi vermek icin acilan satir,
* `granted=0` degeriyle kullanicinin KENDI erisimini sessizce kapatirdi.
*
* SEMANTIK BASIT: satir VARSA yetki vardir, YOKSA yoktur. `user_service_access`
* gibi "kayit yok -> servisin is_default'u" kurali burada GECERLI DEGILDIR —
* hicbir servis bu yetkiyi varsayilan olarak vermez.
*
* (user, service) cifti benzersizdir.
*
* @ORM\Entity(repositoryClass=UserGlobalPasswordAccessRepository::class)
* @ORM\Table(
* name="user_global_password_access",
* uniqueConstraints={
* @ORM\UniqueConstraint(name="uniq_user_global_password_service", columns={"user_id", "service_id"})
* }
* )
* @ORM\HasLifecycleCallbacks
*/
class UserGlobalPasswordAccess
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Groups({
* "user_global_password_access@ref",
* "user_global_password_access@base",
* "user_global_password_access@core"
* })
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="global_password_accesses")
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
* @Groups({
* "user_global_password_access@user"
* })
*/
private $user;
/**
* @ORM\ManyToOne(targetEntity=Services::class)
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
* @Groups({
* "user_global_password_access@base",
* "user_global_password_access@core"
* })
*/
private $service;
/**
* @ORM\Column(type="datetime_immutable", nullable=true)
* @Groups({
* "user_global_password_access@core"
* })
*/
private $created_at;
/**
* @ORM\PrePersist
*/
public function onPrePersist(): void
{
if ($this->created_at === null) {
$this->created_at = new \DateTimeImmutable();
}
}
public function getId(): ?int
{
return $this->id;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
public function getService(): ?Services
{
return $this->service;
}
public function setService(?Services $service): self
{
$this->service = $service;
return $this;
}
public function getCreatedAt(): ?\DateTimeImmutable
{
return $this->created_at;
}
public function setCreatedAt(?\DateTimeImmutable $created_at): self
{
$this->created_at = $created_at;
return $this;
}
}