Olá JRTM,
Vamos lá, deixa eu tentar te mostrar o meu objetivo com esta rotina. Primeiramente vou te mostrar a lógica da coisa e no final vou te mostrar o que desejo fazer:
1º) Tenho no meu banco de dados tenho as seguintes tabelas:
a) tabela que conterá os usuários do sistema
b) tabela que conterá os nomes de Grupos de Acesso ao aplicativo
c) tabela que conterá todas as páginas do sistema
d) tabela que conterá as páginas que o grupo de acesso contemplará ( Grupo Acesso X Paginas )
Baseado neste modulo de dados, eu criei entre outros, um BEAN denominado de CadUsuarios :
public class CadUsuarios {
private String nomeUsuario;
private String senha;
private Integer idGrpAcc; // <= aqui representa o grupo do usuário (Usuario X Grupo Acesso)
private List<GrpAcessoCtxDAOImp> gruposAcesso; // <= aqui Lista contendo todas as paginas
// que o Grupo do usuário poderá ter acesso
public String getNomeUsuario() {
return nomeUsuario;
}
public void setNomeUsuario(String nomeUsuario) {
this.nomeUsuario = nomeUsuario;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public Integer getIdGrpAcc() {
return idGrpAcc;
}
public void setIdGrpAcc(Integer idGrpAcc) {
this.idGrpAcc = idGrpAcc;
}
public List<GrpAcessoCtxDAOImp> getGruposAcesso() {
return gruposAcesso;
}
public void setGruposAcesso(List<GrpAcessoCtxDAOImp> gruposAcesso) {
this.gruposAcesso = gruposAcesso;
}
public CadUsuarios() {
}
// Construtor principal da classe
public CadUsuarios(String nomeUsuario, String senha, Integer idGrpAcc) {
this.nomeUsuario = nomeUsuario;
this.senha = senha;
this.idGrpAcc = idGrpAcc;
}
public CadUsuarios(TreeMap dados) {
this.nomeUsuario = (String) dados.get("tbusuarios.id_Usuario");
this.senha = (String) dados.get("tbusuarios.stsenha");
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final CadUsuarios other = (CadUsuarios) obj;
if (this.nomeUsuario != other.nomeUsuario && (this.nomeUsuario == null || !this.nomeUsuario.equals(other.nomeUsuario))) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 3;
hash = 59 * hash + (this.nomeUsuario != null ? this.nomeUsuario.hashCode() : 0);
return hash;
}
}
Criei um DAO que buscará todas as páginas que o Grupo do Usuário poderá acessar que será passado como parâmetro ao método, o grupo do usuário :
public class GrpAcessoCtxDAOImp implements GrpAcessoCtxDAO {
private Connection conn;
public GrpAcessoCtxDAOImp(Connection conn) throws Exception {
try {
this.conn = ConnectionFactory.getConnection();
} catch (Exception e) {
throw new Exception("Erro: " + ":\n" + e.getMessage());
}
}
/**
* Método que retorna todos os acessos permitidos para o grupo
* @return objeto List
* @throws java.lang.Exception se não for possível retornar o objeto List
*/
public List contextosGrupoAcesso(Integer idGrp) throws Exception {
PreparedStatement ps = null;
Connection conn = null;
ResultSet rs = null;
try {
conn = this.conn;
String sql = "SELECT tbctx.stContexto, tbgrp_acesso.stNomeGrp,";
sql += " tbgrp_acesso_ctx.ID_Grp_Acesso,tbgrp_acesso_ctx.ID_Ctx";
sql += " tbgrp_acesso.blAcessoTotal FROM tbgrp_acesso_ctx";
sql += " INNER JOIN tbctx ON tbgrp_acesso_ctx.ID_Ctx = tbctx.ID_Ctx, tbgrp_acesso";
sql += " WHERE tbgrp_acesso_ctx.ID_Grp_Acesso = tbgrp_acesso.ID_Grp_Acesso";
sql += " AND tbgrp_acesso_ctx.ID_Grp_Acesso = ?";
ps = conn.prepareStatement(sql);
ps.setInt(1, idGrp);
rs = ps.executeQuery();
List<GrpAcessoCtx> list = new ArrayList<GrpAcessoCtx>();
while (rs.next()) {
String stContexto = rs.getString(1);
String stNomeGrp = rs.getString(2);
Integer ID_Grp_Acesso = rs.getInt(3);
Integer ID_Ctx = rs.getInt(4);
list.add(new GrpAcessoCtx(ID_Grp_Acesso, ID_Ctx,stNomeGrp,stContexto));
}
return list;
} catch (SQLException sqle) {
throw new Exception(sqle);
} finally {
ConnectionFactory.closeConnection(conn, ps, rs);
}
}
}
Bom, agora é que vem a seleuma (rsrsrs)... Preciso colocar disponível em sessão assim que o usuário logar no sistema, todas as páginas que o usuário poderá acessar
através do o grupo de acesso ao qual o mesmo estará vinculado. Para isso eu criei o bean
CadUsuarios que contém uma propriedade
List private List<GrpAcessoCtxDAOImp> gruposAcesso;
que em tese deveria ser populada pelo DAO
public class GrpAcessoCtxDAOImp implements GrpAcessoCtxDAO {
. Na minha humilde visão, esse método do DAO que deveria ser o responsável para popuplar essa LISTA.
Resumindo, preciso criar um esquema em que as páginas que o usuário poderá acessar no sistema, fiquem disponíveis o tempo todo em que o aplicativo ficará no ar, para que eu posso utilizar um filtro que faça a autorização ou não deste acesso.
Se você tiver uma idéia melhor será bem vinda. Espero que agora eu tenha conseguido passar o que desejo..rsrsr.
Forte Abraço