Preciso criar um módulo acoplável a determinadas aplicações que fazem pesquisa na base de dados. Esse módulo deverá filtrar as consultas limitando ao usuário enxergar os registros que ele tem permissão de acesso.
Ex.: Pesquisa por documento
Perfil 1 = só acessa os documentos criados por ele.
Perfil 2 = acessa seus documentos e os de seus funcionários
Perfil 3 = acessa todos os documentos da regional
Perfil 4 = acessa todos os documentos…
Possibilidade1: Interceptor
Usar um interceptor para capturar o SQL gerado pelo hibernate e alterá-lo de forma a contemplar a regra de negocio em questão.
Ex. de alteração no sql: “select * from (SQL DO HIBERNATE) as xpto where FILTRO DINAMICO”
Problemas:
meu filtro de pesquisa sempre tem que estar na consulta gerada pelo hibernate.
como poderei identificar as buscas que devem ou não passar por esse filtro (nem toda busca do sistema usa esse filtro)
perda de desempenho para analisar e modificar o SQL do hibernate
Possibilidade2: usar algum recurso do hibernate semelhante filtros que funcione de forma dinâmica, me permitindo definir a regra do filtro em tempo de execução.
Probelmas: não conheço nenhum recurso do hibernate que me permita fazer isso…rs
Desde já agradeço e aceito sugestões para resolver este problema… rsrs
Possibilidade2: usar algum recurso do hibernate semelhante filtros que funcione de forma dinâmica, me permitindo definir a regra do filtro em tempo de execução.
Probelmas: não conheço nenhum recurso do hibernate que me permita fazer isso…rs
tnaires, meu problema vai um pouco além disso… Eu preciso criar um módulo que faça isso independente do tipo de consulta feita pelo desenvolvedor… O desenvolvedor pode fazer suas consultas em hql, criteria, filtro ou até mesmo sql. e esse módulo mágico tem que incluir essa restrição na consulta dele… sacou? Por isso que estou tentando fazer com interceptor, pois com ele eu capturo o sql gerado pelo hibernate, mas alterar esse sql eh complicado e custoso para minha aplicação.
Pensei em fazer alguma coisa semelhante a anotação @Where(clause = “idUsuario=x”), mas preciso incluir essa expressão dinamicamente em tempo de execução entendeu? não sei como poderia fazer algo do tipo…
M
magnocosta
Fala ai pessoal boa noite a todos !
Tive lendo sobre o Spring ele fala sobre interceptadores que são configurados em um xml.
esses interceptadores são disparados por classes e por métodos.
Sendo assim pode criar um interceptador dentro dos Dao`s ai vc insere alguns criterios e seja feliz !
Bom teoricamente e isso ai !
Mais como fazer na pratica eu nao sei !
Procura algo sobre Spring nesse modulo de interceptors !
Ajudou?
Valeussss !!!
P
pcnandes
Fala ae magnocosta, obrigado pela dica, dei uma olhada por alto e aparentemente teria como acionar um interceptor em um método (tenho que ver melhor como isso funciona), mas como eu poderia adicionar os critérios pelo interceptor? e se meu método fizer uma consulta por hql?
Como ja havia dito nao conheco Spring ainda estou estudando ele e nunca trabalhei com ele.
Bom mais pensei em uma gambi aki sinistra !
Testa ai para ver c funciona.
seu dao ficaria assim:
public class Dao {
public static Criteria criteria;
public List<Funcionario> consultar(){
criteria = HibernateUtil.getInstance().getSession().createCriteria(Agencia.class);
criteria.add(Restrictions.eq("numero", numero));
//O interceptador deve executar aqui
criteria.list();
}
}
E na sua classe interceptor ficaria assim:
public class interceptor{
public void intercptarConculta(){
Criteria c = Dao.criteria;
//Aki vc cria as restricoes que serao abstraidas
c.addRestrictions(Restrictions.eq("acesso", 10)));
Dao.criteria = criteria;
}
}
Cara ta ai nao sei t dar certeza c vai funcionar, to na faculdade e to sem tempo para testar.
Agora tem que desenrolar no Spring para ele invocar a classe interceptarConsulta no método da classe Dao.
Obs: Se for possivel fazer isso com Spring, realmente ele eh sinistro.