Bom dia todos.
Wellington,
1º) Creio que a sua análise está um pouco equivocada, pois voce não teria nem que criar diferentes classes para instanciar diferentes tipos de profissões, sabe por quê :?: :?: :?: Porque todo profissional é um funcionário, então o que voce deveria fazer era simplesmente criar uma classe Funcionário acessando dados da tabela Funcionário, contendo todos os profissionais da Empresa (Médicos, Psicólogos e etc.), tabela esta com um campo chamado cargo, e nesse campo que voce vai armazenar a profissão de cada funcionário.
2º) Seguindo a dica do nosso amigo Riqueluz, nem todo Funcionário vai ser um usuário do sistema, pois o pessoal da limpeza, por exemplo, não vai acessar o sistema, vai :?: Não quero, e longe de mim querer discriminar o pessoal da limpeza, pois haverá também o pessoal de enfermagem, até mesmo médicos que possívelmente não terão acesso ao sistema, então deve-se criar uma tabela de Usuário. Além disso, existe outro fator que voce não levou em consideração, vá que a clínica que te contratou diga pra voce o seguinte: [color=red]"…Quero que cada profissional de saúde tenha acesso somente as fichas dos seus clientes…"[/color]. Mais um motivo para criar a tabela Usuário e a tabela Funcionário, e estas tabelas poderão estar relacionadas no tipo de relacionamento Um para Um.
3º) Seguindo a orientação do atendimento médico personalizado, voce pode criar a tabela Cliente com um atributo “fk_func”, onde irá armazer o id do funcionário que será um usuário, que o atende, fazendo um relacionamento entre as tabelas Funcionario (PK) - Cliente (FK), sendo o relacionamento de um (Funcionario) para vários (Clientes). Assim sendo, voce pode construir uma instrução SQL para acessar o cadastro de clientes da seguinte forma:
Select * from CadCliente Where fk_func = id_usuario
Lembra daquela diagramação que te passei sobre as tabelas “Membro”, “Grupo”, “Acesso” e “Funcionalidade” :?: Pois é, voce vai carregar dados para dentro de sua aplicação somente da tabela “Funcionalidade” que em outras palavras significa “Permissões”, dados estes de acordo com o id_usuario. Onde estes dados serão armazenados na aplicação :?: Dentro da classe Usuário, armazenando dentro de um atributo do tipo ArrayList ou até mesmo um HashMap. A instrução SQL para este caso ficaria assim:
select M.usu_id_usuario, F.fun_aplicacao from membro M inner join (
grupo G inner join (
acesso A inner join funcionalidade F on F.fun_codigo = A.fun_codigo)
on A.gru_id_grupo = G.gru_id_grupo)
on G.gru_id_grupo = M.gru_id_grupo
where M.usu_id_usuario = id_usuario.
Agora é só popular um ArrayList ou HashMap da classe Usuario, com todas as funcionalidades, cujos valores poderão ser Ler tabela tal, Atualizar tabela tal e assim por diante, e o acesso a esta instrução SQL acima voce vai fazer dentro da classe Login, logo assim que autenticar o usuario, Após isso, crie um método booleano dentro do DAO do usuário com a seguinte sintaxe:
// Classe usuario
...
private static ArrayList<String> permissao;
...
public static ArrayList<String> getPermissao() {
// Evitando o NullPointer
if (Usuario.permissao == null) Usuario.permissao = new ArrayList<String>();
return Usuario.permissao;
}
/* Popular as permissões dentro da classe login.
Após autenticar o usuário, usar a instrução sql acima
e popular as permissões com o método get */
.....
.....
while (resultset.next()) {
...
Usuario.getPermissao().add(resultset.getString("F.fun_aplicacao");
...
}
// Método de acesso que deverá ser criado dentro do DAO do usuário.
public boolean isAccessGranted(String funcionalidade) {
if (Usuario.getPermissao().contains(funcionalidade) {
return true;
} else {
return false;
}
}
Assim que voce acessar o form de cadastro de clientes, poderá fazer a verificação com o método acima, da seguinte forma:
UsuarioDAO usudao = new UsuarioDAO();
if (usudao.isAccessGranted("Cadastrar Cliente")) {
/* Acessa o banco com a instrução SQL do cliente personalizado
fazenda as devidas conexões com uma classe conexao */
Select * from CadCliente Where fk_func = usuario.getId();
É claro que eu não te passei a codificação toda, pois esta dica serve apenas para te orientar de como iniciar o procedimento correto, ficando a seu critério de como voce irá desenvolver, afinal de contas, voce também tem que estimular um pouco os seus neurônios.
Não tem :?: :lol:
Um abraço.