Bloquear exibição de dados para usuário diferente do logado
18/02/2011 00:00
0
Estou com o seguinte problema:

Meu aplicativo usa o plugin Acegi para controlar o acesso a aplicação e no RequestMap está o seguinte:
/cliente/** = ROLE_USER, ROLE_ADMIN
Na listagem eu filtro somente os clientes do usuário logado. Até aqui tudo Ok.

Só que se outro usuário digitar diretamente a URL com o ID do cliente ele consegue visualizar todos os registros:
<!-- m --><a class="postlink" href="http://localhost:8080/cadastro/cliente/show/">http://localhost:8080/cadastro/cliente/show/</a><!-- m -->1

Tentei bloquear a visualização na action Show do clienteController - comparando a instância do usuário do cliente com o usuário logado - mas não obtive sucesso:


def show = {
def clienteInstance = Cliente.get(params.id)

// recupera usuário logado e...
def usuario = authenticateService.userDomain()
// ...compara com o usuário do registro solicitado
if (!clienteInstance.usuario.equals(usuario)) {
flash.message = 'Acesso negado!'
redirect(action&#58; &quot;list&quot;)
}

if (!clienteInstance) {
flash.message = &quot;${message(code&#58; 'default.not.found.message', args&#58; [message(code&#58; 'cliente.label', default&#58; 'Cliente'), params.id])}&quot;
redirect(action&#58; &quot;list&quot;)
}
else {
[clienteInstance&#58; clienteInstance]
}
}


Quero que somente o usuário logado tenha acesso aos seus registros para exibição ou exclusão e que outro usuário não consiga acesso aos mesmos ao digitar a URL.

Agradeço a quem puder me ajudar na solução deste problema.
Tags: Grails


0
O que acontece? O redirect não funciona? O sistema encontra o usuario mesmo assim? Dá algum erro?
24/11/2011 17:44


0
Olá macaine.
Faz tanto tempo este post que já tinha me esquecido dele.

O sistema mostrava qualquer cliente (mesmo de outros usuários) bastando colocar o id do mesmo na action Show.

Consegui resolver colocando o código abaixo que compara o usuário logado com o cliente que deseja visualizar e se pertence a ele:


else
if (usuario.id == clienteInstance.usuario.id) {
[clienteInstance: clienteInstance]
}


Talvez tenha alguma outra forma de bloquear o acesso indevido mas não sei.
25/11/2011 13:05



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto