Bom dia pessoal.
Tenho uma questão que provavelmente alguém já passou por ela.
O sistema terá que controlar dados de N filiais, e os usuários poderão fazer consultas nestes dados.
Porém o usuário1 pode apenas consultar a filial1, por outro lado o usuário2 por consultar a filial2 e filial3.
Notem que os dois usuários terão acesso a página de consulta, mas com nível de permissão restrito.
Eu estava pensando em implementar isso com o Filter
Você também poderia ter vários datasource/persistence-units na mesma aplicação (artefato único).
Antes de realizar uma consulta ou coisa do tipo, seria verificado qual a filial do cara. Seria algo do tipo:
DS ds = getUsuarioDataSource(user.getFilial());
ds… e assim vai.
O método getUsuarioDataSource teria algo do tipo:
if filial.equals(EMREPSA_A) return dsA
lele_vader
Com filter acho que não dá não, pois ambos terão acesso a página.
Acho que vai ter que ser antes de entrar na tela você vai ter que ver o nível do usuário logado e somente trazer as filiais relacionadas a ele.
WRYEL
Que tal analisarmos seu problema em mais alto nível ? vamos lá …
Estou partindo do pressuposto que você já tem as permissões cadastradas em seu banco de dados, seu método poderia ser:
public List<Filial> UsuarioService.getFiliaisPorPermissaoDeConsulta(Usuario usuario);
ou
public List<Filial> UsuarioService.getFiliaisPorPermissaoDeConsulta(Usuario usuario, Set<Permissao> permissoes);
Destacando que seu Filial pode ser um proxie, ejb ou um objeto remoto qualquer. Considere ler depois sobre o design pattern Service Locator também, pode ser que ele te ajude.
asandrob
Estava pensando…
E se eu carregar um atributo de sessão (“where filial in '1;2;3”) junto com o objeto user.
Esse “where” seria contruído no login do usuário, e seria utilizado nas rotinas dos DAO’s.
lele_vader
A tabela de usuário não tem o nível dele não ?
Ou pelo menos se relaciona com essa tabela ?
Porque daí seria pegar o nível do cara e filtrar lá na visualização das filiais.
asandrob
lele_vader:
A tabela de usuário não tem o nível dele não ?
Ou pelo menos se relaciona com essa tabela ?
Porque daí seria pegar o nível do cara e filtrar lá na visualização das filiais.
Exato, é isso que eu quero fazer, mas tens alguma sugestão de implementação?
lele_vader
Passe o usuário logado para um objeto de sessão, isso juntamente com o seu nível.
No seu método que lista as filiais você passa o seu usuário.
Na sua consulta se estiver usando jpa, você pode usar criteria para listar as filiais dependendo do nível ou usar um or com jqpl.
asandrob
lele_vader:
Passe o usuário logado para um objeto de sessão, isso juntamente com o seu nível.
No seu método que lista as filiais você passa o seu usuário.
Na sua consulta se estiver usando jpa, você pode usar criteria para listar as filiais dependendo do nível ou usar um or com jqpl.
OK, tentarei implementar como o sugerido, até pq foi ± assim que eu pensei.
Valew galera…