PHP code example of musikhood / auth-client-bundle
1. Go to this page and download the library: Download musikhood/auth-client-bundle library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
musikhood / auth-client-bundle example snippets
// src/Entity/User.php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Musikhood\AuthClient\Contract\PanelUserInterface;
use Ramsey\Uuid\UuidInterface;
#[ORM\Entity(repositoryClass: \App\Repository\UserRepository::class)]
#[ORM\Table(name: 'users')]
#[ORM\UniqueConstraint(name: 'uniq_users_email', columns: ['email'])]
class User implements PanelUserInterface
{
#[ORM\Id]
#[ORM\Column(type: 'uuid', unique: true)]
private UuidInterface $id;
#[ORM\Column(type: 'string', length: 180, unique: true)]
private string $email;
#[ORM\Column(type: 'string', length: 255, nullable: true)]
private ?string $displayName = null;
/** @var list<string> */
#[ORM\Column(type: 'json')]
private array $rolesForPanel = [];
#[ORM\Column(type: 'boolean', options: ['default' => false])]
private bool $disabled = false;
#[ORM\Column(type: 'datetime_immutable')]
private \DateTimeImmutable $lastSyncedAt;
private function __construct() {}
/** @param list<string> $rolesForPanel */
public static function create(
UuidInterface $id,
string $email,
?string $displayName,
array $rolesForPanel,
): self {
$user = new self();
$user->id = $id;
$user->email = $email;
$user->displayName = $displayName;
$user->rolesForPanel = array_values($rolesForPanel);
$user->disabled = false;
$user->lastSyncedAt = new \DateTimeImmutable();
return $user;
}
/** @param list<string> $rolesForPanel */
public function syncFromClaims(string $email, ?string $displayName, array $rolesForPanel): void
{
$this->email = $email;
$this->displayName = $displayName;
$this->rolesForPanel = array_values($rolesForPanel);
$this->lastSyncedAt = new \DateTimeImmutable();
}
public function markDisabled(bool $disabled): void { $this->disabled = $disabled; }
public function getId(): UuidInterface { return $this->id; }
public function getEmail(): string { return $this->email; }
public function getDisplayName(): ?string { return $this->displayName; }
/** @return list<string> */
public function getRolesForPanel(): array { return $this->rolesForPanel; }
public function isDisabled(): bool { return $this->disabled; }
/** @return list<string> */
public function getRoles(): array
{
$roles = ['ROLE_USER'];
foreach ($this->rolesForPanel as $r) { $roles[] = 'ROLE_' . $r; }
return array_values(array_unique($roles));
}
public function getUserIdentifier(): string { return $this->email; }
public function eraseCredentials(): void {}
}
// src/Repository/UserRepository.php
namespace App\Repository;
use App\Entity\User;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Musikhood\AuthClient\Contract\PanelUserInterface;
use Musikhood\AuthClient\Contract\PanelUserRepositoryInterface;
use Ramsey\Uuid\UuidInterface;
use Symfony\Component\DependencyInjection\Attribute\AsAlias;
/** @extends ServiceEntityRepository<User> */
#[AsAlias(id: PanelUserRepositoryInterface::class)]
class UserRepository extends ServiceEntityRepository implements PanelUserRepositoryInterface
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, User::class);
}
public function findById(UuidInterface $id): ?PanelUserInterface
{
return $this->find($id);
}
public function findByEmail(string $email): ?PanelUserInterface
{
return $this->findOneBy(['email' => $email]);
}
public function save(PanelUserInterface $user): void
{
$this->getEntityManager()->persist($user);
}
public function flush(): void
{
$this->getEntityManager()->flush();
}
public function createFromClaims(
UuidInterface $id,
string $email,
?string $displayName,
array $rolesForPanel,
): PanelUserInterface {
return User::create($id, $email, $displayName, $rolesForPanel);
}
}