Como recuperar um usuário pela session
07/01/2009 00:00
0
Olah pessoal,

Estou desenvolvendo um sistema no qual, para cada novo update em um form, o sistema deverá gravar no BD o id do usuário que fez o cadastro.

Eu consegui recuperar a session do usuário mas não sei como transformá-la no id do mesmo para que esta possa ser gravada no BD.

Vejam:

<g:textField name=&quot;person.id&quot; value=&quot;${session?.id}&quot; ></g:textField>

Com a TAG acima, cada vez que eu entro na view (edit) do form, ele mostra a session do usuário no campo texto, está funcionando corretamente, só me resta agora é saber quem é o usuário dono desta session para gravar seu id no BD.

Aguardo retorno galera,

Obrigado.
Tags: Grails


0
rlinux, blz?

Cara, o que vc quer gravar seria por exemplo, o id do usuário logado?

Acho que o session?.id que vc está usando não tem relação com o usuário.

O que vc poderia fazer é colocar o usuário na session (se é que vc já não está fazendo isso) quando ele se loga e lá naquele textField pegar o id do usuário logado como value.
08/01/2009 00:00


0
eu fiz dessa forma :

def save = {
params.dataInsert = new Date()
params.usuario = session.sessao_usuario
params.cliente = Cliente.get(session.entidadeId)
def atendimentoHstInstance = new AtendimentoHst(params)
if(!atendimentoHstInstance.hasErrors() &amp;&amp; atendimentoHstInstance.save()) {
flash.message = &quot;Histórico de Atendimento criado com sucesso !&quot;


Herrera
08/01/2009 00:00


0
Herrera

Isso considerando que session.sessao_usuario vai retornar o usuário, certo.

rlinux

Completando minha resposta anterior, o objeto session é uma instancia de HttpSession da API de Servlet (http&#58;//grails.org/doc/1.0.x/ref/Servlet%20API/session.html).

Pode olhar o Javadoc da Interface HttpSession para mais informações:

http&#58;//java.sun.com/j2ee/1.4/docs/api/javax/servlet/http/HttpSession.html
08/01/2009 00:00


0
Boa galera, sou eu novamente e ainda com o problema da session, acreditem!

Na verdade, eu estou fazendo uso do plugin acegi em meu sistema e não gostaria de ter que refazer tudo na mão.

Ou seja, vou mostrar uma action &quot;save&quot; de um dos meus controladores, assim, no meu sistema possuo uma tabela person gerada pelo plugin automaticamente. E em todos os forms eu coloquei person atrelado a eles para que quando do cadastro ou atualização de um registro, fique gravado tb o id de person para no futuro eu tenha um histórico das alterações ok?

Bom, vejam minha action abaixo:

def save = {
println session.person
def contribuinte = new Contribuinte(params)
contribuinte.person = session.person
if(!contribuinte.hasErrors() &amp;&amp; contribuinte.save()) {
flash.message = &quot;Contribuinte ${contribuinte.id} criado.&quot;
redirect(action:show,id:contribuinte.id)
}
else {
render(view:'create',model:[contribuinte:contribuinte])
}
}

Notem que eu coloquei, depois de dicas do colega &quot;Kico&quot; (que manja muito =) ) uma linha println session.person para tentar ver se o sistema estava pegando a session de person no form mas isso não funcionou, quero dizer, a session retorna null.

Será que alguém que conhece o plugin acegi a fundo poderia me dizer como fazer para recuperar a session de person no meu sistema?

Vejam que se isso for possível, eu substituirei &quot;contribuinte.person&quot; por isso e tirarei a tag (combobox da escolha de person) do formulário (view) de contribuinte e o problema estará resolvido.

Já chequei a fundo o plugin, percebi que ele cria uma AuthBase e trabalha com o &quot;AuthenticateService&quot; e confesso, esgotei meus recursos.

Assim sendo se alguém puder me ajudar, ficarei muito agradecido =)
13/09/2009 00:00


0
só uma pergunta, em que ponto do seu sistema voce coloca contribuinte.person na sessão ?

Herrera
13/09/2009 00:00


0
Não entendi!

Toda vez que eu logo no sistema, penso eu que meu usuário está na session, ou seja, meu sistema possui um USER que nada mais é que uma PERSON (tudo isso é feito de forma automática com o plugin acegi).

Entretanto, não consigo recuperar esse USER (ou PERSON na tabela do MySQL).

Com o &quot;contribuinte.person = session.person&quot; eu imaginei que pudesse recuperar o &quot;person.id&quot; do usuário logado para registrar este no meu BD para histórico futuro (conforme mencionei).

Se puder me demonstrar como colocar um contribunte.person numa sessão eu agradeço,

Abraço,
14/09/2009 00:00


0
faça assim para salvar o objeto usuario na sessão:
session.usuarioCorrente = usuario


e para obter da sessão faça assim :
 def usuario = session.usuarioCorrente


fácil, não é ?

Herrera
16/09/2009 00:00


0
Caro Herrera,

Em primeiro lugar, muito obrigado pela DICA.

Mas consegui resolver o problema. Confesso, foi muito estudo e muita garimpagem no Google para achar algo confiável e que me pudesse iluminar =)

Segue a DICA, agora em português para todos os nossos membros e visitantes =)

O plugin ACEGI, utilizado para facilitar e muito o nosso trabalho na criação de um sistema confiável de autenticação de usuários, usa o AuthenticateService, assim sendo, para construirmos algo que possa inserir o id de person (que tb é uma classe criada pelo plugin), devemos fazer o seguinte.

Nas view´s create e edit, devemos simplesmente comentar o bloco que possui o campo para inserir o usuário logado, ou seja, person! Lembrando que é só colocar na classe que se deseja o &quot;Person person&quot; para o BD ser construído de forma correta e possibilitar isso.

Depois, no controlador da classe, devemos inserir logo na primeira linha o:

import org.grails.plugins.springsecurity.service.AuthenticateService

Ainda no controlador, logo abaixo do class SuaclasseController {

Inserímos:

AuthenticateService authenticateService

E para completar, levando-se em consideração que nossa classe é &quot;Contribuinte&quot;, devemos colocar nas actions save, update e edit o que segue: (mostrarei só a save mas o processo é igual para as demais)

def save = {
session.user = authenticateService.userDomain()
def contribuinte = new Contribuinte(params)
contribuinte.person = session.user
if(!contribuinte.hasErrors() &amp;&amp; contribuinte.save()) {
flash.message = &quot;Contribuinte ${contribuinte.id} criado&quot;
redirect(action:show,id:contribuinte.id)
}
else {
render(view:'create',model:[contribuinte:contribuinte])
}
}

É isso ae, enfim, PRONTO =)
17/09/2009 00:00


0
obrigado pela dica. Realmente ajudou muito!
16/12/2009 00:00



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