Olá meus caros, tudo bem? Estou em dúvida de como posso proceder para uma solução melhor no projeto de estudo que estou desenvolvendo. Temos o seguinte desenho. Coloquei dessa forma pois um usuário poderá ter mais de uma permissão de acesso das funções do sistema. Foram criadas as classes e as entidades dos bancos.
<?php
namespace LyraMaker\SistemaLogin\Model;
use ArrayObject;
class User
{
private string $id;
private string $nome;
private string $senha;
private string $email;
private array $acesso;
public function __construct(string $id, string $nome, string $senha, string $email)
{
$this->setId($id);
$this->setNome($nome);
$this->setSenha($senha);
$this->setEmail($email);
$this->acesso = [];
}
public function setID(string $id)
{
$this->id = $id;
}
public function setNome(string $nome)
{
$this->nome = $nome;
}
public function setSenha(string $senha)
{
$this->senha = $senha;
}
public function setEmail(string $email)
{
$this->email = $email;
}
public function setAcesso(Permission $acesso)
{
if (!in_array($acesso, $this->acesso)) {
array_push($this->acesso, $acesso);
return;
}
return;
}
public function getId()
{
return $this->id;
}
public function getNome(): string
{
return $this->nome;
}
public function getSenha(): string
{
return $this->senha;
}
public function checkSenha(string $senha): bool
{
return password_verify($senha, $this->getSenha());
}
public function getEmail(): string
{
return $this->email;
}
public function getAcesso(): array
{
return $this->acesso;
}
}
<?php
namespace LyraMaker\SistemaLogin\Model;
class Permission
{
private string $id;
private string $nome;
private ?string $descricao;
private string $dataCriacao;
function __construct(string $id, string $nome, ?string $descricao, string $dataCriacao)
{
$this->setId($id);
$this->setNome($nome);
$this->setDescricao($descricao);
$this->setDataCriacao($dataCriacao);
}
public function setId(string $id)
{
$this->id = $id;
}
public function setNome(string $nome)
{
$this->nome = $nome;
}
public function setDescricao(?string $descricao)
{
$this->descricao = $descricao;
}
public function setDataCriacao(string $dataCriacao)
{
$this->dataCriacao = $dataCriacao;
}
public function getId()
{
return $this->id;
}
public function getNome()
{
return $this->nome;
}
public function getDescricacao()
{
return $this->descricao;
}
public function getDataCriacao()
{
return $this->dataCriacao;
}
}
E a classe Repository do user
<?php
namespace LyraMaker\SistemaLogin\Repository;
use LyraMaker\SistemaLogin\Helper\Connection;
use LyraMaker\SistemaLogin\Model\User;
class RepositoryUser
{
private $pdo;
public function __construct()
{
$this->pdo = (new Connection())->open();
}
public function register(User $user)
{
$sqlInsert = "INSERT INTO User (id,nome,senha,email,acesso) VALUES (:id,:nm,:snh,:ml,:css)";
$stmnt = $this->pdo->prepare($sqlInsert);
$stmnt->bindValue(":id", $user->getId());
$stmnt->bindValue(":nm", $user->getNome());
$stmnt->bindValue(":snh", $user->getSenha());
$stmnt->bindValue(":ml", $user->getEmail());
$stmnt->bindValue(":css", $user->getAcesso());
$stmnt->execute();
}
public function viewAll(): array
{
$userList = $this->pdo
->query('SELECT * FROM User;')
->fetchAll(\PDO::FETCH_ASSOC);
return array_map(
$this->hydrate(...),
$userList
);
}
public function findById($id)
{
$sql = "SELECT id,nome,senha,email,acesso FROM user WHERE id = $id";
$data = $this->pdo->query($sql)->fetch(\PDO::FETCH_ASSOC);
return $this->hydrate($data);
}
public function hydrate(mixed $allData): ?User
{
if($allData !== false){
$user = new User($allData['id'], $allData['nome'], $allData['senha'], $allData['senha']);
$user->setAcesso($allData['acesso']);
return $user;
}
return null;
}
}
Gostaria que os valores das permissões ficassem todos juntos no atributo acesso da class user. Só que os valores repetidos estão ficando únicos, em índices diferentes na array final, o que posso fazer?