Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida sobre a implementação

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

1 resposta
solução!

Olá, André.

Não entendi muito bem o propósito dessa alteração. Quais seriam as vantagens?