Boa noite a todos.
Dê uma olhada neste diagrama de dados.
![](http://img827.imageshack.us/img827/5803/wellington2.png)
Bom agora vamos as funções de cada tabela,
1º) A tabela “Usuario” (cor amarela), lógico e evidente armazenará os dados do Usuário, podendo até ser uma tabela simples, somente com os campos “Nome”, “Login” e “Senha”.
2º) A tabela “Grupo” vai armazenar os grupos de perfís de usuários, lembra de como o Windows armazena seus perfís (Administrador, Usuário Avançado, Usuário Restrito e etc.), pois e nesta tabela “Grupo” que voce vai armazenar estes perfis.
3º) A tabela “Funcionalidade” vai armazenar cada função de “Inserção”, “Edição”, “Atualização” e “Consulta”, configurando cada função destas para cada tabela de seu banco de dados, inclusive a tabela “Usuario”.
4º) Ora cada Perfil que está no grupo, poderá ter mais de uma funcionalidade destas, assim como a recíproca é verdadeira, ou seja, cada funcionalidade poderá estar em mais de um perfil, e ai que entra a tabela “Acesso” funcionando como um tabela tupla, ligando o “Grupo” a "Funcionalidade, e por isso os campos “gru_id_grupo” e “fun_codigo” tem que ser chaves primárias compostas.
5º) Assim como a tabela “Perfil”, o mesmo ocorrerá com a tabela “Membro”, ligando o Usuário ao Grupo, onde também a reciprocidade de relacionamente também e verdadeiro, ou seja, cada perfil ou grupo poderá tem mais de um usuário e cada usuário pode ter mais de um perfil, onde os campos “usu_id_usuario” e gru_id_grupo também são chaves primárias compostas.
A ordem de inserção de dados nestas tabelas devem obedecer a seguinte ordem: 1º)“Funcionalidade”, 2º)“Grupo”, 3º)“Usuarios”, 4º)“Acesso” e 5º) “Membro”, lembrando que “Acesso” e “Membro” apenas fazem associações entre “Funcionalidade com Grupo” e “Grupo com Usuarios”, respectivamente.
Pois bem, agora vamos implementar a aplicação. 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")) {
// Implementa o acesso de acordo com o perfil do Usuário
}
É claro que eu não te passei a codificação toda, pois esta dica serve apenas para te orientar de como implementar uma aplicação considerada tão complexa de modo simples, sem precisar de abrir mão de configurar vários perfis para cada usuário, sem a necessidade de ampliar sua aplicação, como foi comentado aqui, onde voce sabendo utilizar todos os recursos que não só a linguagem Java oferece, mas também o SGDB e suas linguagens SQL, e combinando ambas, voce cria implementações simples com grande poderio de processamento.