Você poderia dar um atributo à classe Funcionário, que valida se o funcionário pode fazer ou não login no sistema:
private string $senha;
private bool $login = false;
E definir os metodos para retorno da senha e retorno se pode ou não fazer login: public function obterSenha(): string { return $this->senha; }
public function podeLogar(): bool {
return $this->login;
}
Na classe Diretor definia uma senha e um atributo $login = true, indicando que os directores podem fazer login, e ainda os metodos para retornar a senha e se pode ou não fazer login:
<?php namespace Alura\Banco\Modelo\Funcionario;
class Director2 extends Funcionario2 {
private string $senha = '1234';
private bool $login = true;
public function calcularBonificacao(): float
{
return $this->getSalario() * 2;
}
public function obterSenha(): string {
return $this->senha;
}
public function podeLogar(): bool {
return $this->login;
}
}
Depois tinha o autenticador:
class Autenticador2 {
public function tentaLogin(Funcionario2 $funcionario2, string $senha) {
if($funcionario2->podeLogar()) {
if($funcionario2->obterSenha() === $senha) {
echo "O director está autenticado!";
}else{
echo "Ops, senha incorrecta!!!";
}
}
}
}
Se quisesse um novo cargo que não tenha acesso a login apenas tem de por o atributo de $login = false; se quer um que faça login pode colocar no atributo $login = true;
Seria uma boa implementação feita dessa forma?
Ou então simplesmente implementar o metodo podeAutenticar() na classe Funcionario a retornar por padrão false:
public function podeAutenticar(string $senha): bool
{
return false;
}
E caso o Desenvolvedor por exemplo não pudesse autenticar iria herdar esse metodo da classe mae retornando false. Depois na classe autenticador já poderia receber Funcionário em vez de apenas Director, e o funcionario apenas faria login caso o metodo podeAutenticar retorne true.
Obrigado