Meu acegi =D
09/02/2009 00:00
0
Boa tarde.
Bem, eu tentei usar o acegi mais não sei se eu fui mto ignorante, mais não me dei mto bem com ele =D

Más como dizia o poeta: "Se vc quer algo bom, faça vc mesmo" (acho qui eh assim)

intaum eu fiz uma gambiarra, qui está funcionando mto bem comigo.
o que eu fiz, foi nada mais nada menos do que pegar o Acegi, fazer o que ele faz, más de uma maneira que eu entendesse como ele funciona.
eu copiei alguns códigos da classe dominio e dos controllers =D
e intaum criei um filtro que faz os selects e verifica se eu tenhu acesso ou não.

funciona do mesmo jeito que o acegi:
Vc tem que possuir uma classe de dominio para Usuário, Roles e RequestMap

As minhas classes não ficaram mto complicada, a única coisa diferente são os relacionamento que ficaram assim:

Usuarios

static hasMany = [roles:Roles]
static belongsTo = Roles


Roles
	static hasMany = [usuarios:Usuarios, mapeamento:Mapeamento]


Mapeamento
	static hasMany = [roles:Roles]
static belongsTo = Roles


Gerei os controllers e as views dos dominios Usuarios e Mapeamento
e alterei nas seguintes partes:

na action "create" o return deve ficar assim
Usuarios:
return ['usuariosInstance':usuariosInstance, rolesList: Roles.list()]


Mapeamento:
return ['mapeamentoInstance':mapeamentoInstance, rolesList: Roles.list()]


na action "save" acrescentar isso antes do if do "hasErrors":
Mapeamento:

if(mapeamentoInstance.save()){
for(String roleL in Roles.list()){
for(String param in params.keySet()){
if(param.contains(roleL.rolename) && params.get(param) == 'on'){
Roles.findByRolename(param).addToMapeamento(mapeamentoInstance)
}
}
}
}


Usuarios:
if(usuariosInstance.save()){
for(String roleL in Roles.list()){
for(String param in params.keySet()){
if(param.contains(roleL.rolename) && params.get(param) == 'on'){
Roles.findByRolename(param).addToUsuarios(usuariosInstance)
}
}
}
}


Na view Create o código para acresentar é igual para Mapeamento e Usuarios
							<g&#58;each in=&quot;$&#123;rolesList&#125;&quot;>
<tr>
<td valign=&quot;top&quot; class=&quot;name&quot; align=&quot;left&quot;>$&#123;it.rolename.encodeAsHTML()&#125;</td>
<td align=&quot;left&quot;><g&#58;checkBox name=&quot;$&#123;it.rolename&#125;&quot;/></td>
</tr>
</g&#58;each>


Até agora esses códigos eu só copiei do Acegi e &quot;encaixei&quot; eles na minha aplicação, mais a maior parte da gambiarra é como fica o filtro, qui é nessa parte qui vcs podem me ajudar:

crie um AcessoFilters.groovy em grails-app\utils
com o seguinte código:

public class AcessoFilters&#123;

def Filters = &#123;

role(constroller&#58;'*', action&#58;'*')&#123;
before = &#123;
if(Usuarios.findByLogin(session.usuario))&#123;
def a = Usuarios.findByLogin(session.usuario).roles.rolename

for(String u in a)&#123;

if(Roles.findByRolename(u))&#123;
def b = Roles.findByRolename(u)

if(Mapeamento.findByControleAndAcao(controllerName, actionName))&#123;
def c = Mapeamento.findByControleAndAcao(controllerName, actionName)

for(String x in c.roles.rolename)&#123;
String role = b
String maps = x
if(!role.equals(maps))&#123;
render(&quot;Usuario nao tem acesso a esta pagina!&quot;)
&#125;
&#125;
&#125;else&#123;
render(&quot;Nao existe mapeamento para esta pagina!&quot;)
&#125;
&#125;else&#123;
render(&quot;Role nao existe!&quot;)
&#125;
&#125;
&#125;else&#123;
render(&quot;Usuario nao possui nenhuma role!&quot;)
&#125;
&#125;
&#125;

&#125;

&#125;


Ainda tem mto que melhorar, eu ainda nao alterei o código das outras views, mais conserteza é so adaptar da mesma forma que vem no acegi =D

ainda deve ter mto que melhorar, eu sou iniciante nessa parte de grails =D e gostaria que vcs falassem o que vcs acharam da minha idéia, como melhorar, se vale a pena e blá blá blá.

vlww
Tags: Grails


0
Quais problemas voce teve com o acegi?

Apos a instalação basta associar um Role ao usuario, e associar quais recursos(mascaras de url) disponíveis para cada Role.

Más como dizia o poeta: &quot;Se vc quer algo bom, faça vc mesmo&quot; (acho qui eh assim)

Muito pelo contrário. Queremos fazer a coisa da maneira mais fácil possível. Para isso as convenções. Reinventar a roda toda aplicação cansa muito. <!-- s:? --><img src="{SMILIES_PATH}/icon_confused.gif" alt=":?" title="Confused" /><!-- s:? -->
15/02/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