Dificuldade com Lógica (Java + SQL)

Boa tarde!

Estou fazendo um trabalho de recuperação e estou com dificuldades em um ponto crucial do projeto, e vou tentar explicar no que estou pedindo ajuda, dando uma visão geral do programa:

Tenho que elaborar uma aplicação em java que utilize um banco de dados para configurar um menu de usuário.
Eu estou usando o banco de dados que vem junto com o Netbeans, o Derby.
Criei as seguintes tabelas:

[color=red]Usuários[/color]
id
Nome
Senha
Ativo
menuId

[color=red] Menus[/color]
id
Nome
Padrao

[color=red] Opcoes[/color]
id
Nome
Aplicacao
Ativo

[color=red] MenusOpcoes[/color]
id
menuID
opcaoID

O usuário ADMIN poderá criar usuários e configurar um menu para cada usuário.
Até onde eu fiz o meu admin consegue criar menus, opções e usuários normalmente.

Quando um usuário fizer o login na aplicação a aplicação deve apresentar o menu de opçoes de acordo com a configuração definida pelo ADMIN.
É ai que está a dificuldade!

Ao criar uma opção no menu o ADMIN :
a) definirá qual a aplicação que estará associada. Exemplo : Opção do menu “Bloco de Notas” abrirá o “Notepad.exe”
b) definir a chamada a outro menu já existente.
Eu gravei o caminho do .exe do que eu quero abrir em uma String no campo Aplicacão na tabela Opções do Banco de Dados

Bom, tem outros detalhes que ainda não fiz, mas estou enroscado nisso. Como abrir esse menu novo com o usuario novo.

Como dividi em várias classes, vou colocar a parte que entro com usuario e senha:

Menu

[code]public class MenuLoginUI {

private UsuarioDAO usuarioDAO;
private UsuarioDTO usuarioDTO;

public void entradaUsuario() throws SQLException {
    usuarioDAO = new UsuarioDAO();
    usuarioDTO = new UsuarioDTO();
    this.logar();
    usuarioDAO.conferir(usuarioDTO);
}

public void logar() {
    System.out.println("---- LOGIN ----");
    System.out.println("Entre com o nome:  ");
    usuarioDTO.setNomeUsuario(Keyboard.readString());
    System.out.println("Entre com a senha:  ");
    usuarioDTO.setSenhaUsuario(Keyboard.readString());
    System.out.println("-------------------------");
}

}[/code]

E o método Conferir()

[code] public void conferir(UsuarioDTO usuario) throws SQLException {
if (usuario.getNomeUsuario().equals(“admin”) && usuario.getSenhaUsuario().equals(“admin”)) {
principal.menuPrincipal();
} else {
String sql = “select nome, senha from usuarios where nome=? and senha=? and ativo=‘1’”;
PreparedStatement argumento = database.getConnection().prepareStatement(sql);
argumento.setString(1, usuario.getNomeUsuario());
argumento.setString(2, usuario.getSenhaUsuario());

        ResultSet registro = argumento.executeQuery();
        if (registro.next()) {
            principal.menuPrincipal();
        } else {
            System.out.println("-----USUÁRIO NÃO AUTORIZADO-----");
            login.entradaUsuario();
        }
    }
}

[/code]

LEMBRANDO QUE ESTOU USANDO APENAS TEXTO E NADA DE GRÁFICO!

Agradeço desde já qualquer ajuda!!!

Alguém poderia me ajudar?

Poxa, estou desesperado!

Ninguém poderia dar uma força?

Opa Danilo blz?

Olha só eu ainda não precisei fazer algo desse tipo, mas eu estava
pensando aqui uma maneira de fazer isso seria vc criar mas uma tabela no seu banco de dados
vinculada ao codigo ou oque vc usa para identificar cada pessoa do seu BD
nessa tabela vc armazenaria as opções que esta pessoa tem sendo assim
na hora da consulta vc verifica quais são as opções que determinada pessoa tem
e as exibe!

um exemplo disso seria vc criar a tabela com campos de valor inteiro e vc coloca
o valor 0 ou 1 sendo o 1 usado para identificar que se deve ter a opção para a pessoa
Exemplo
TABELA
COLUNA_1 esta com o valor 0
COLUNA_2 esta com o valor 1
COLUNA_3 esta com o valor 0

Nesse exemplo ai vc só exibiria para esta pessoa a coluna_2

Vc pode troca o valor de inteiro para um char tb e so armazenar “S” ou “N”

Eu não sei se eu entendi direito mas eu acho que é isso ai, cada pessoa vai ter certas funcionalidade
vinculadas ao seu login, se for isso a solução que eu pensei foi essa, pode não ser a melhor, mas ja ajuda!

Bom espero que isto te ajude, qualquer coisa é so postar ai!

E o método Conferir()

[code] public void conferir(UsuarioDTO usuario) throws SQLException {
if (usuario.getNomeUsuario().equals(“admin”) && usuario.getSenhaUsuario().equals(“admin”)) {
principal.menuPrincipal();
} else {
String sql = “select nome, senha from usuarios where nome=? and senha=? and ativo=‘1’”;
PreparedStatement argumento = database.getConnection().prepareStatement(sql);
argumento.setString(1, usuario.getNomeUsuario());
argumento.setString(2, usuario.getSenhaUsuario());

        ResultSet registro = argumento.executeQuery();
        if (registro.next()) {
            principal.menuPrincipal();
        } else {
            System.out.println("-----USUÁRIO NÃO AUTORIZADO-----");
            login.entradaUsuario();
        }
    }
}

[/code]

Cara este metodo conferir sempre conferi o Admin pq?!!

O Intuito dele não é você conferir se o usuario esta ativo e definir um menu a este usario?!!

Se este for o intuito a logica deste metodo esta estranha:

1º somente o Admin entra neste metodo conferir

  if (usuario.getNomeUsuario().equals("admin") && usuario.getSenhaUsuario().equals("admin"))

O certo não é conferir o usario e definir o menu deste usuario?!

Nesse caso você poderia definis grupos para o seu usuario.

Se o usuario pertencer ao grupo tal monte tal menu.

Olha que dica bacana hein!!!

2º Olha sua query:

String sql = "select nome, senha from usuarios where nome=? and senha=? and ativo='1'"; PreparedStatement argumento = database.getConnection().prepareStatement(sql); argumento.setString(1, usuario.getNomeUsuario()); argumento.setString(2, usuario.getSenhaUsuario());

Esta vendo que voce esta fazendo desta forma nos finais das contas:

select  nome, senha from usuarios where nome = admin and senha = admin and ativo =1;

O intuito não seria verificar o usario e senha de qualquer usuario?!

Então repense nesta Logica.

minha dica:
1º Crie uma tabela grupo e adicione uma coluna FK na tabela usuarios.
2º no metodo conferir ao invés de vc sempre verificar se o cara é admin e não deixando os outros usuarios comum se logar.
crie uma query que verifica se existe o usuario e senha passados nos metodos setNomeUsuario e setSenhaUsuario.

3º após o usario conseguindo se logar, você faz if’s ou switch case’s para verificar o grupo e exibir o menu atrelado ao grupo.

Pronto simples assim.

O Admin defini a que grupo o user vai participar e você define os menus associados aos grupos.

Bom eu faria desta forma!!!

Abraços!!!