–No Banco de dados PostgreSQL 9.3 criei 3 Tabelas,
CREATE TABLE tbl_usuario
(
cod_usuario serial NOT NULL,
nome_usuario character varying(40) NOT NULL,
cod_departamento integer NOT NULL,
login_usuario character varying(30) NOT NULL,
senha_usuario character varying(30) NOT NULL,
status_usuario character varying(14) NOT NULL,
cod_empresa integer NOT NULL,
CONSTRAINT “PK_COD_USUARIO” PRIMARY KEY (cod_usuario),
CONSTRAINT “UK_LOGIN_USUARIO” UNIQUE (login_usuario)
)
WITH (
OIDS=FALSE
);
ALTER TABLE tbl_usuario
OWNER TO postgres;
CREATE TABLE tbl_nivel_permissao
(
cod_permissao serial NOT NULL,
descricao_permissao character varying(60) NOT NULL,
CONSTRAINT pk_permissao_usuario PRIMARY KEY (cod_permissao)
)
WITH (
OIDS=FALSE
);
ALTER TABLE tbl_nivel_permissao
OWNER TO postgres;
CREATE TABLE tbl_permissao_usuario
(
cod_permissao integer,
cod_usuario integer,
CONSTRAINT fk_cod_permissao FOREIGN KEY (cod_permissao)
REFERENCES tbl_nivel_permissao (cod_permissao) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_cod_usuario FOREIGN KEY (cod_usuario)
REFERENCES tbl_usuario (cod_usuario) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE tbl_permissao_usuario
OWNER TO postgres;
–Criei uma classe CadastroUsuario e dentro dela o metodo abaixo:
public boolean getPermissoes(String login, String permissao) {
boolean permissaoExistente = false;
try {
con = conexaoDB.getConexao();
stm = con.prepareStatement(sql = "SELECT U.LOGIN_USUARIO, P.DESCRICAO_PERMISSAO FROM\n"
+ "TBL_USUARIO U, TBL_PERMISSAO_USUARIO N, TBL_NIVEL_PERMISSAO P WHERE\n"
+ "U.COD_USUARIO = N.COD_USUARIO AND P.COD_PERMISSAO = N.COD_PERMISSAO AND U.LOGIN_USUARIO = ? AND P.DESCRICAO_PERMISSAO = ?;");
stm.setString(1, login);
stm.setString(2, permissao);
rs = stm.executeQuery();
if (rs.next()) {
permissaoExistente = true;
//System.out.println(rs.getString("DESCRICAO_PERMISSAO"));
}
} catch (SQLException ex) {
Logger.getLogger(CadastroUsuario.class.getName()).log(Level.SEVERE, null, ex);
}
return permissaoExistente;
}
–Agora no FramePrincipal criei o metodo abaixo que compara as permissoes cadastradas no Banco de Dados com a Descrição do Menu:
/INICIO Metodo para verificar as permissões do usuário/
public static void setPermissoes() {
CadastroUsuario usuario = new CadastroUsuario();
/* Inicio análise permissão MENU SISTEMA-----------------------------------------------------------------------------------------------------------*/
if (usuario.getPermissoes(getInstancia().jLabelUsuarioLogado.getText().toUpperCase(), getInstancia().MENU_SISTEMA.getText().toUpperCase())) {
getInstancia().MENU_SISTEMA.setVisible(true);
//INICIO análise permissão SUB MENU Administracao Sistema
if (usuario.getPermissoes(getInstancia().jLabelUsuarioLogado.getText().toUpperCase(), getInstancia().jMenuAdmSistema.getText().toUpperCase())) {
getInstancia().jMenuAdmSistema.setEnabled(true);
} else {
getInstancia().jMenuAdmSistema.setEnabled(false);
}
//FIM
} else {
getInstancia().MENU_SISTEMA.setVisible(false);
}
}
/* Fim análise permissão MENU SISTEMA---------------------------------------------------------------------------------------------*/
–Para os demais Menus e Sub Menus basta seguir as mesmas lógica,
–Se alguém tiver uma idéia de como melhorar isso , por favor fiquem avontade, estou apenas começando no java e estou contribuindo com o que sei no momento.
– A vantagem que encontrei nesse modo é que o usuário visualizará apenas os menus cadastrados, e será habilitado apenas os sub menus cadastrados para o mesmo.
–Ressalto, sou iniciante no java, se alguém tiver sugestões quanto a melhorias no código, será ótimo.