Sessão Grails e Controlador
28/11/2012 17:01
1
Boa tarde!
Tenho uma pequena dúvida, espero que possam me orientar.
Gostaria que no ação list, do controlador me retornasse somente os dados referentes ao usuário logado, e não todos os registros cadastrados.
Um objeto do tipo Usuario estará na seção, então o que teria que fazer, existe alguma maneira dinamica de fazer isso, ou vou ter que esvrever o método list(params) da classe?

Ex.:

def list() {
params.max = Math.min(params.max ? params.int('max') : 10, 100)
[marcaInstanceList: Marca.list(params), marcaInstanceTotal: Marca.count()]
}

nesse caso quero que "[marcaInstanceList: Marca.list(params), marcaInstanceTotal: Marca.count()]" retorne somente alguns registros, que pertencem ao usuario logado.

Posso alterar para algo do tipo
"[marcaInstanceList: Marca.listAllByAlgumaCoisa(params), marcaInstanceTotal: Marca.count()]" ?

Grato


Tags: classe sessao


0
Fala Brother! eu não entendi muito bem.. mas o Domain tem um método chamado get... já que vc vai ter o usuário na sessão.. seria o caso de pegar o id dele e passar pro get.

User user = User.get(session.user.id)


Abraço!


0
Opa blz.
Então o usuário está ok, garantido...rs
O que eu quero é que todas as outras classes, no "def list" retornem somente os registros que pertencem aquele usuário.

"[marcaInstanceList: Marca.listAllByAlgumaCoisa(params), marcaInstanceTotal: Marca.count()]"

onde esse
Marca.listAllByAlgumaCoisa(params) retornaria somente as marcas cadastradas pelo usuário atualmente logado, e não todos os registros...

resumindo quero que o trecho:

def list() {
params.max = Math.min(params.max ? params.int('max') : 10, 100)
[marcaInstanceList: Marca.list(params), marcaInstanceTotal: Marca.count()]
}

retorne somente as marcas cadastradas/pertencentes pelo usuario corrente, e não todas as marcas.

Valeu


0
Brother, acho que nesse caso vc deveria alterar sua modelagem, o usuario, teria ou pertenceria a uma ou várias classes... pelo que entendi então, um usuário poderia registrar várias Marcas... Então creio que poderia ser um relacionamento um-para-muitos. Quando vc fazer uma consulta.. vc tem que retornar todas as marcas que pertence ao usuário tal!

Abraço!


0
É isso mesmo a modelagem está exatamente assim um-para-muitos.
mas quando o "def list..." da marca é executado ele retorna todos os registros.
preciso saber como usar o usuario que está na sessão, para que o "def list" da Marca me retorne somente as marcas do usuário da sessão. A modelagem está ok, o que preciso saber é como alterar o "def list" de Marca para ele retornar somente os dados onde o Usuario.id que está na sessão seja o mesmo do registro de Marca.

Abç!


0
Não entendi o pq precisa ser um list. Você não pode simplesmente usar um Marca.findAllByUsuario()?
29/11/2012 10:34


0
To meio confuso com o que você está querendo fazer e o problema

Poderia explicar melhor?
29/11/2012 11:09


0
Brother,

É o que o Luciano falou, não faz sentido vc usar o list de Marca pra fazer o que vc quer, ao meu ver seria mais viável usar o findAll ou criteria.


0
Amigos, Quando o Luciano fala usar um list() ele está falando em criar um método para listagem no controlador.
29/11/2012 21:09


0

def listByCampus() {
def campusInstance = Campus.get(params.campusId)
if(!campusInstance) {
render(view: "/notfound")
return
}

def docenteInstanceList = Docente.findAll(params) {unidadeOrigem == campusInstance}
params.max = Math.min(params.max ? params.int('max') : 10, 100)
render (view: "list", model: [docenteInstanceList: docenteInstanceList,
docenteInstanceTotal: Docente.findAllByUnidadeOrigem(campusInstance).size(),
campusId: params.campusId])
}


Este é o exemplo de como faço uma listagem de Docentes originário de um determinado Campus no SGE.
29/11/2012 21:13


0
Bom dia galera.
Obrigado, consegui resolver.
O que fiz foi o seguinte:
alterei de:

def list() {
params.max = Math.min(params.max ? params.int('max') : 10, 100)
[marcaInstanceList: Marca.list(params), marcaInstanceTotal: Marca.count()]
}

para

def list() {
params.max = Math.min(params.max ? params.int('max') : 10, 100)
[marcaInstanceList: Marca.findAllByUsuario(params), marcaInstanceTotal: Marca.count()]
}

e deu tudo certo!rs
Obrigado pela ajuda!!!


0
Tentei usar o exemplo do último post e não funcionou.

Mas eu coloquei da seguinte forma e funcionou:

    def list(Integer max) {
params.max = Math.min(max ?: 10, 100)
[contaInstanceList: Conta.findAllByUser(session.user, params), contaInstanceTotal: Conta.count()]
}
24/03/2014 00:13


0
Vocês conhecem o multi-tenant? ele faz com que um usuário (ou grupo de usuário) só tenham acesso aos dados do seu tenant, desta forma todo este tratamento que estão fazendo ja são tratados pelo tenant do usuário logado.
Existem alguns plugins para grails que fazem isso, exemplo: single-db
24/03/2014 13:44


0
Olá Dyego, eu já li um pouco sobre o multi-tenant, porém não entendi muito bem como implementar. Sei que a última versão do Hibernate tem isto também.
Estou olhando a documentação que você passou sobre o single-db, parece ser simples.

Em outro post eu implementei o controle de usuário manual e alterei o Controller.groovy para que todo list uso o findAllByUser se o domain tiver a propriedade user. Segue o link: Como saber se uma propriedade existe
30/03/2014 16:23


0
Ok Gustavo, acompanhei esse outro post seu também.
Fazer este controle manual pode funcionar, entretanto vc está assumindo toda a responsabilidade de separar os dados de cada "cliente", quando se trata de separações pontuais é tranquilo, agora se você precisar tratar uma aplicação inteira pode passar a ser bastante complexo, ai o MultiTenant passa a ser bem interessante.
31/03/2014 14:25


0
Marcelo, você poderia mostrar como ficou para 'relacionar' o usuario com a conta?

se possível coloque o domain completo e o controller
09/04/2014 11:15



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