Boa tarde,
estou com uma dúvida referente à uma certa lógica.
O negócio é o seguinte:
Tenho uma página onde vários elementos dessa página serão mostrados somente se o usuario tiver permissão para viasualizar aquele elemento.
Essa permissão é previamente cadastrada em banco de acordo com o perfil do usuario. Até aí tudo bem…Eu coloco as permissões daquele perfil
em uma ArrayList, e faço a comparação: se o usuário tem a permissão, mostra, senão…não mostra (a vá).
O problema é: em vários momentos dessa página, eu terei que verificar se o usuário possui permissão para tal conteúdo, como por exemplo:
O usuário possui permissão para listar todos aqueles elementos, porém, não possui permissão para excluir nenhum elemento, logo, a coluna de
exclusão da tabela, não deverá ser impressa para ele. Logo depois, vem a coluna de alteração, e não são todos os usuários que podem alterar,
e lá vai o java ver se o manolo tem permissão pra isso.
Quais as possibilidades em que eu pensei?
1º - Eu poderia fazer um loop for para percorrer a minha arraylist que tem todas as minhas permissões, toda vez que eu precisasse imprimir um
elemento que não é comum à todos os usuários. Logo, seria um loop for para ver se o usuario pode listar os elementos, outro pra ver se ele pode
excluir esses elementos, e outro pra ver se ele pode alterá-los. Me pareceu trabalhoso demais e não segue nem um pouco o principio de reutilização
de código.
2º - Eu poderia criar uma variável do tipo boolean para cada elemento que eu precisasse de permissão, como por exemplo: boolean editar, boolean excluir,
boolean listar, boolean incluir. E em 1 só loop for, eu iria definir cada uma. Na hora de imprimir o elemento, eu iria verificar somente se sua respectiva variavel
é true ou false. Me pareceu um outro gato (gambiarra). Eu iria alocar espaço na memória, sem ter a real necessidade, afinal, só quero saber se o cara pode ver
o elemento ou não.
3º - Eu trabalhei o dia todo, não aguento mais programar, e eu não estou vendo uma solução muito mais simples do que alocar memoria desnecessariamente, ou
fazer multiplos loops for para uma coisa tão básica.
Enfim, como não achei nenhuma solução além dessas 2, eu fiquei me perguntando qual seria menos agressiva ao processamento do sistema: alocar memoria ou
multiplos processamentos de for?
Logo abaixo vai o código, meio que resumido:
<%
ArrayList permissoes = (ArrayList)session.getAttribute("permissoes");
boolean permissao = true; //Provavelmente vocês irão me ajudar à acabar com essa variavel tambem...
if(permissoes==null){
}else{
for (Iterator iterator = permissoes.iterator(); iterator.hasNext(); ) {
Permissoes perm = (Permissoes) iterator.next();
if(perm.getIdAtividade()==27){ //Aqui, 27 é o id da permissão cadastrada no banco, que no caso é listar os usuarios.
permissao = true;
break;
}else{
permissao = false;
}
}
}
if(permissao==true){
%>
<br>
<table>
<tr>
<th>Nome</th>
<th>Login</th>
<th>Perfil</th>
<th>Editar</th> <!--Esse elemento não pode ser mostrado à todos-->
</tr>
<%
UsuarioDAO udao = new UsuarioDAO();
PerfilDAO pdao = new PerfilDAO();
ResultSet rs = null;
ResultSet rs2 = null;
int linha = 0;
try{
rs = udao.listar();
while(rs.next()){
if(linha==0){ //Isso aqui é firula, só pra tabela ficar mais bacaninha...=D
out.print("<tr bgcolor='white'>");
linha = 1;
}else{
out.print("<tr>");
linha = 0;
}
pdao.setIdPerfil(rs.getInt("id_perfil"));
rs2 = pdao.listar(1);
%>
<td><%=rs.getString("nome_usuario")%></td>
<td><%=rs.getString("login_usuario")%></td>
<%
while(rs2.next()){
%>
<td><%=rs2.getString("nome_perfil")%></td>
<%
}
%>
<td></td>
<%
out.print("</tr>");
}
}catch(SQLException e){
out.print(e.getMessage());
}
%>
</table>
<%
}else{
%>
<br>
<center>
Você não possui privilegios para acessar esta area.
</center>
<%
}
%>
