[URGENTE] - Problemas com SecurityFilters
03/08/2010 00:00
import carteiro_veloz.*;
class BootStrap {
def init = { servletContext ->
def password = CriptografaSenha.criptografa("pa")
def u = new Usuario(login:'carteiro.veloz@gmail.com',emailAlternativo:'jguilhermemv@gmail.com',senha:password,nome:'administrador',admin:true).save(flush:true)
def u1 = new Usuario(login:'cliente@gmail.com',emailAlternativo:'cliente@gmail.com',senha:password,nome:'cliente',admin:false).save(flush:true)
def g = new Grupo(nome:'ADMIN',descricao:'ADMINISTRADOR').save(flush:true)
def g1 = new Grupo(nome:'CLIENTE',descricao:'USUARIO CLIENTE').save(flush:true)
def uG = UsuarioGrupo.create(u,g,true)
def uG1 = UsuarioGrupo.create(u1,g1,true)
def p1 = new Permissao(url:'/carteiro_veloz_grails/usuario/auth').save(flush:true);
def p2 = new Permissao(url:'/carteiro_veloz_grails/usuario/create').save(flush:true);
def p3 = new Permissao(url:'/carteiro_veloz_grails/usuario/list').save(flush:true);
def p4 = new Permissao(url:'/carteiro_veloz_grails/usuario/show').save(flush:true);
def p5 = new Permissao(url:'/carteiro_veloz_grails/usuario/save').save(flush:true);
def p6 = new Permissao(url:'/carteiro_veloz_grails/usuario/show/**').save(flush:true);
def p7 = new Permissao(url:'/carteiro_veloz_grails/usuario/index').save(flush:true);
def p8 = new Permissao(url:'/carteiro_veloz_grails/usuario/logout').save(flush:true);
GrupoPermissao.create(p1,g1,true)
GrupoPermissao.create(p2,g1,true)
GrupoPermissao.create(p3,g1,true)
GrupoPermissao.create(p4,g1,true)
GrupoPermissao.create(p5,g1,true)
GrupoPermissao.create(p7,g1,true)
GrupoPermissao.create(p8,g1,true)
//GrupoPermissao.create(p6,g1,true)
}
def destroy = {
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Guilherme
*/
import carteiro_veloz.*
class SecurityFilters {
def filters = {
loginCheck(controller:'*', action:'*') {
before = {
if(controllerName == null && actionName == null ){
println "controller e action null"
render(view: "index")
}else{
if(!session.usuario && actionName != "login") {
flash.message = "Você não tem permissão para acessar a página, por favor efetue o login"
redirect(uri:"/")
return false
}else if(session.usuario && actionName != "login"){
println "usuario esta logado e a action nao é login"
if(!session.usuario.admin){
println "usuario nao é administrador"
/*if(actionName == "logout"){
println 'entrou logout 1'
redirect(controller:"usuario", action:"list")
return false
}else{
}*/
println "Parametros: "+params
def uri = request.forwardURI
def gruposPermissoes = null
println uri
def count = 0
def b = UsuarioGrupo.findAllByUsuario(session.usuario)
boolean error = false
b.each { i ->
error = false
if(!error){
count++
println "Pesquisando UsuarioGrupo com grupo "+i.grupo.nome+" e usuario "+i.usuario.login
def p = Permissao.findByUrl('/carteiro_veloz_grails/'+controllerName+'/'+actionName+'/**')
if(p == null){
println "Permissao "+'/carteiro_veloz_grails/'+controllerName+'/'+actionName+'/**' + 'nao encontrada'
p = Permissao.findByUrl('/carteiro_veloz_grails/'+controllerName+'/'+actionName+'/*')
if(p == null){
println "Permissao "+'/carteiro_veloz_grails/'+controllerName+'/'+actionName+'/*' + 'nao encontrada'
p = Permissao.findByUrl(uri)
if(p == null){
println "Permissao "+uri+ ' nao encontrada'
error = true
}else{
println "Permissao encontrada 2"
gruposPermissoes = GrupoPermissao.findAllByPermissaoAndGrupo(p,i.grupo)
if(gruposPermissoes != null){
println "achou a permissao no banco de dados"
error = false
}else{
error = true
println "nao achou a permissao no banco de dados"
}
}
}else{
println "Permissao "+'/carteiro_veloz_grails/'+controllerName+'/'+actionName+'/*' + ' encontrada'
def temp = uri
def index1 = temp.lastIndexOf("/")
def j = '/carteiro_veloz_grails/'+controllerName+'/'+actionName+'/'
def index2 = j.lastIndexOf("/")
if(index2 != index1 ){
error = true
}else{
println "Permissao encontrada 1"
gruposPermissoes = GrupoPermissao.findAllByPermissaoAndGrupo(p,i.grupo)
if(gruposPermissoes != null){
println "achou a permissao no banco de dados"
error = false
}else{
error = true
println "nao achou a permissao no banco de dados"
}
}
}
}else{
println "Permissao encontrada 3"
println "Procurando permissao "+p.url+"para o grupo " +i.grupo.nome
gruposPermissoes = GrupoPermissao.findByPermissaoAndGrupo(p,i.grupo)
if(gruposPermissoes != null){
println "achou a permissao no banco de dados"
error = false
}else{
error = true
println "nao achou a permissao no banco de dados"
}
}
}
}
println "Contagem: "+count
if(gruposPermissoes == null || error){
println "teste 11"
flash.message = "Você não tem permissão para acessar a página."
redirect(controller:"usuario",action:"index")
return false
}else{
println controllerName + " - "+actionName
}
}
}
}
}
}
}
}
package carteiro_veloz
class Usuario {
String login
String emailAlternativo
String senha
String nome
boolean ativo = true
boolean admin = false
Date dataCadastro = new Date()
static hasMany = [contatos:Contato]
static constraints = {
login blank: false, unique: true, email:true
senha blank: false, password:true
emailAlternativo blank:false,nullable:false
dataCadastro blank: false, nullable: false
nome blank: false, nullable: false
ativo blank: false, nullable:false
admin blank: false, nullable:false
}
static mapping = {
id(generator:'sequence',params:[sequence:'usuario_id_seq'])
table name: 'usuario'
table schema: 'acesso'
login column: 'login'
admin column: 'admin'
emailAlternativo column: 'email_alternativo'
ativo column: 'ativo'
senha column: 'senha'
version: false
}
Set<Grupo> getGrupos() {
UsuarioGrupo.findAllByUsuario(this).collect { it.grupo } as Set
}
String toString(){
return login
}
}
package carteiro_veloz
class UsuarioController {
static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
def index = {
redirect(action: "list", params: params)
}
def login = {
if(request.get){
println "view auth"
render(view:"auth")
}else {
def u = Usuario.findByLogin(params.login)
println "tentou encontrar usuario"
if(u.ativo){
if(u) {
println "usuario encontrado"
params.senha = CriptografaSenha.criptografa(params.senha)
if(u.senha == params.senha) {
session.usuario = u
redirect(action:"index")
}
else {
flash.message = "Usuario ou senha inválidos"
render(view:"auth")
}
}
else {
println "usuario nao encontado"
flash.message = "Usuario ou senha inválidos"
render(view:"auth")
}
}else{
flash.message = "Não existe o usuário informado no sistema."
render(view:"auth")
}
}
}
def logout = {
println "entrou logout"
session.usuario = null
session.invalidate()
redirect(controller:"usuario", action:"login")
}
def list = {
params.max = Math.min(params.max ? params.int('max') : 10, 100)
[usuarioInstanceList: Usuario.list(params), usuarioInstanceTotal: Usuario.count()]
}
def create = {
def usuarioInstance = new Usuario()
usuarioInstance.properties = params
return [usuarioInstance: usuarioInstance]
}
def save = {
println "entrou no save"
def user = Usuario.findByLogin(params.login)
if(user != null){
def usuarioInstance = new Usuario(params)
usuarioInstance.errors.rejectValue("login", "default.usuario.alreadyCreated")
render(view: "create", model: [usuarioInstance: usuarioInstance])
}else{
if(!params.emailAlternativo.isEmpty() && !params.login.isEmpty() && params.emailAlternativo.equals(params.login)){
def usuarioInstance = new Usuario(params)
println 'entrou no email alternativo'
usuarioInstance.errors.rejectValue("emailAlternativo", "default.usuario.emailAlternativoIgualLogin", [message(code: 'default.usuario.emailAlternativoIgualLogin')] as Object[], "O email alternativo não pode ser o mesmo do login. Insira um e-mail diferente.")
render(view: "create", model: [usuarioInstance: usuarioInstance])
}else{
def senha = "";
if(!params.senha.isEmpty() && params.senha != null ){
params.senha = CriptografaSenha.criptografa(params.senha)
senha = params.senha
}
def usuarioInstance = new Usuario(params)
if (usuarioInstance.save(flush: true)) {
println "entrou apos save"
flash.message = "${message(code: 'default.created.message', args: [message(code: 'usuario.label', default: 'Usuario'), usuarioInstance.id])}"
redirect(action: "show", id: usuarioInstance.id)
}
else {
usuarioInstance.senha = senha
render(view: "create", model: [usuarioInstance: usuarioInstance])
}
}
}
}
def show = {
println "entrou no show"
println "procurando usuario de id: "+params.id
def usuarioInstance = Usuario.get(params.id)
if (!usuarioInstance) {
println "nao achou o usuario"
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
redirect(action: "list")
return false
}
else {
println "renderiza show"
return [usuarioInstance: usuarioInstance]
}
}
def edit = {
def usuarioInstance = Usuario.get(params.id)
if (!usuarioInstance) {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
redirect(action: "list")
}
else {
return [usuarioInstance: usuarioInstance]
}
}
def update = {
def usuarioInstance = Usuario.get(params.id)
if (usuarioInstance) {
if (params.version) {
def version = params.version.toLong()
if (usuarioInstance.version > version) {
usuarioInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'usuario.label', default: 'Usuario')] as Object[], "Another user has updated this Usuario while you were editing")
render(view: "edit", model: [usuarioInstance: usuarioInstance])
return
}
}
if(params.senha.length() != 128){
println 'entrou 128'
params.senha = CriptografaSenha.criptografa(params.senha)
}
usuarioInstance.properties = params
if (!usuarioInstance.hasErrors() && usuarioInstance.save(flush: true)) {
flash.message = "${message(code: 'default.updated.message', args: [message(code: 'usuario.label', default: 'Usuario'), usuarioInstance.id])}"
redirect(action: "show", id: usuarioInstance.id)
}
else {
render(view: "edit", model: [usuarioInstance: usuarioInstance])
}
}
else {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
redirect(action: "list")
}
}
def delete = {
def usuarioInstance = Usuario.get(params.id)
if (usuarioInstance) {
usuarioInstance.ativo = false
try {
usuarioInstance.save(flush: true)
flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
redirect(action: "list")
}
catch (org.springframework.dao.DataIntegrityViolationException e) {
flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
redirect(action: "show", id: params.id)
}
}
else {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
redirect(action: "list")
}
}
}
static constraints = {
login blank: false, unique: true, email:true
senha blank: false, password:true
emailAlternativo blank:false,nullable:false
dataCadastro blank: false, nullable: false
nome blank: false, nullable: false
ativo blank: false, nullable:false
admin blank: false, nullable:false
}
static constraints = {
login (blank: false, unique: true, email:true)
senha (blank: false, password:true)
emailAlternativo (blank:false,nullable:false)
dataCadastro (blank: false, nullable: false)
nome (blank: false, nullable: false)
ativo (blank: false, nullable:false)
admin (blank: false, nullable:false)
}
Para se registrar, clique aqui.