Interceptar delete action do scaffold
25/08/2010 00:00
0
Apenas determinados tipos de usuários podem realizar determinadas ações em meu sistema, estou fazendo este controle por meio de Filters. O problema é com a action delete a partir do scaffold gerado, onde não consigo interceptá-la com
if (actionName == "delete")...
, pois quando se clica no botão delete gerado o action name passado é o index. Como fazer isso pelo filtro?
Tags: Grails


0
Ola Quantum...

Você já tentou utilizar o plugin acegi? É mt produtivo e fácil de usar, no meu caso os usuários de uma empresa não poderiam visualizar os dados de outra empresa, e o admin é o único que não possui empresa.
Dá uma olhada como resolvi isso:

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

class CrewController {

def authenticateService

...

def delete = {
def crewInstance = Crew.get(params.id)
// Busca o usuário logado no sistema pelo authenticateService provido pelo plugin
def company = User.get(authenticateService.userDomain().id)?.company
if (crewInstance && (crewInstance.groupLine.company == company || company == null)) {
try {
crewInstance.delete(flush: true)
flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'crew.label', default: 'Crew'), params.id])}"
redirect(action: "list")
}
catch (org.springframework.dao.DataIntegrityViolationException e) {
flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'crew.label', default: 'Crew'), params.id])}"
redirect(action: "show", id: params.id)
}
}
else {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'crew.label', default: 'Crew'), params.id])}"
redirect(action: "list")
}
}


Bom, eu só precisei controlar isso nesse controller, se você tiver muitos sugiro criar um controller base onde realize esse teste e estenda os demais.

Aqui tem um bom exemplo <!-- m --><a class="postlink" href="http://www.syger.it/Tutorials/GrailsWebAlbum.html">http://www.syger.it/Tutorials/GrailsWebAlbum.html</a><!-- m --> e aqui tem outro <!-- m --><a class="postlink" href="http://code.google.com/p/grum/">http://code.google.com/p/grum/</a><!-- m -->

Espero ter ajudado, qualquer coisa prende o grito...
27/08/2010 00:00


0
[quote=&quot;hstreb&quot;]Ola Quantum...

Você já tentou utilizar o plugin acegi? É mt produtivo e fácil de usar, no meu caso os usuários de uma empresa não poderiam visualizar os dados de outra empresa, e o admin é o único que não possui empresa.
Dá uma olhada como resolvi isso:

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

class CrewController {

def authenticateService

...

def delete = {
def crewInstance = Crew.get(params.id)
// Busca o usuário logado no sistema pelo authenticateService provido pelo plugin
def company = User.get(authenticateService.userDomain().id)?.company
if (crewInstance &amp;&amp; (crewInstance.groupLine.company == company || company == null)) {
try {
crewInstance.delete(flush&#58; true)
flash.message = &quot;${message(code&#58; 'default.deleted.message', args&#58; [message(code&#58; 'crew.label', default&#58; 'Crew'), params.id])}&quot;
redirect(action&#58; &quot;list&quot;)
}
catch (org.springframework.dao.DataIntegrityViolationException e) {
flash.message = &quot;${message(code&#58; 'default.not.deleted.message', args&#58; [message(code&#58; 'crew.label', default&#58; 'Crew'), params.id])}&quot;
redirect(action&#58; &quot;show&quot;, id&#58; params.id)
}
}
else {
flash.message = &quot;${message(code&#58; 'default.not.found.message', args&#58; [message(code&#58; 'crew.label', default&#58; 'Crew'), params.id])}&quot;
redirect(action&#58; &quot;list&quot;)
}
}


Bom, eu só precisei controlar isso nesse controller, se você tiver muitos sugiro criar um controller base onde realize esse teste e estenda os demais.

Aqui tem um bom exemplo <!-- m --><a class="postlink" href="http://www.syger.it/Tutorials/GrailsWebAlbum.html">http://www.syger.it/Tutorials/GrailsWebAlbum.html</a><!-- m --> e aqui tem outro <!-- m --><a class="postlink" href="http://code.google.com/p/grum/">http://code.google.com/p/grum/</a><!-- m -->

Espero ter ajudado, qualquer coisa prende o grito...[/quote]

Então. Talvez numa próxima app eu use este plugin, mas nesta não vou ter tempo de reimplementar minha segurança com ele. Ainda procurando uma forma de interceptar o delete sem ter que mexer em todos os controllers...
30/08/2010 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