| Author |
Message |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/04/2006 21:07:12
|
andre_guitar7
![[Avatar]](/images/avatar/f033ab37c30201f73f142449d037028d.jpg)
Joined: 21/03/2006 12:03:21
Messages: 259
Location: Curitiba - PR
Offline
|
Olá
Criei grupos admins, managers, users na AppManager:
Code:
public void init( Context application ){
AuthorizationManager authorizationManager = new AuthorizationManager();
authorizationManager.addGroup( new Group( "admins" ) );
authorizationManager.addGroup( new Group( "managers" ) );
authorizationManager.addGroup( new Group( "users" ) );
AuthorizationManager.setInstance( application , authorizationManager );
this.personDAO = new DefaultComponent( PersonHibernateDAO.class );
this.messageDAO = new DefaultComponent( MessageHibernateDAO.class );
this.noticeDAO = new DefaultComponent( NoticeHibernateDAO.class );
this.setDebugMode( true );
}
Estes já são atributos dos meus usuários e já estão sendo gravados em banco... um usuário do grupo admins pode alterar a permissão (grupo) dos managers e users... quando eu altero a permissão do grupo de alguém o usuário não recebe essa nova permissão (grupo) na mesma session... ou seja, tenho que fechar meu browser e abrir novamente pra que meu usuário receba a nova permissão (grupo)... q será que está acontecendo?
vlw
Ps1: eu executo o Logout do usuário e nada... não é o Hibernate, pois a alteração de grupo é exibido na tela normalmente, sem precisar fechar o browser...
Ps2: tá ficando muito legal meu sistema/site... parabéns
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/04/2006 21:34:19
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Se o ADMIN está mudando as permissoes de um outro usuario, entao esse outro usuario tem que se logar de novo para forcar o recarregamento das configuracoes do banco.
Se vc está chamando session.reset() no logout action, não tem porque nao esta funcionando.
Provavelmente o seu logout action nao estah chamando session reset.
Ta usando LogoutAction do Mentawai ou a sua propria action de logout ?
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/04/2006 21:44:42
|
andre_guitar7
![[Avatar]](/images/avatar/f033ab37c30201f73f142449d037028d.jpg)
Joined: 21/03/2006 12:03:21
Messages: 259
Location: Curitiba - PR
Offline
|
To usando o LogouAction do mentawai (org.mentawai.action.LogoutAction). Ele está fazendo o logout normalmente... tanto é que se eu tento acessar algo restrito ele pede pra fazer login... ele não tá trocando os grupos de permissão. Quando dá um session.reset() ele zera os grupos tbém?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/04/2006 22:06:04
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
session.reset zera a session...
não tem nada haver com os grupos...
toda vez que o adm mudar as configurações de grupos / permissões, vc vai ter que forçar um reload do seu AuthorizationManager do banco. Ou melhor, quando alterar o banco, altera tb o AuthorizationManager, daí vc não precisa recarregar nada do banco.
Quando a permissões de um usuário, essas devem estar no banco de dados. Se isso muda, o cara precisa se logar de novo e no momento do login vc vai no banco pegar as permissões dele, do mesmo jeito que vc vai lá pegar a senha dele. Essa é a maneira correta de fazer isso.
|
Sergio Oliveira
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/04/2006 22:17:46
|
andre_guitar7
![[Avatar]](/images/avatar/f033ab37c30201f73f142449d037028d.jpg)
Joined: 21/03/2006 12:03:21
Messages: 259
Location: Curitiba - PR
Offline
|
saoj wrote:
session.reset zera a session...
não tem nada haver com os grupos...
toda vez que o adm mudar as configurações de grupos / permissões, vc vai ter que forçar um reload do seu AuthorizationManager do banco.
Como posso forçar esse reload?
saoj wrote:
Quando a permissões de um usuário, essas devem estar no banco de dados. Se isso muda, o cara precisa se logar de novo e no momento do login vc vai no banco pegar as permissões dele, do mesmo jeito que vc vai lá pegar a senha dele. Essa é a maneira correta de fazer isso.
É isso que acontece... o Hibernate pega todas as informações do usuário, inclusive os grupos... tanto é que ele exibe na tela as informações do usuário e os grupos que esse usuário pertence... quando faço logout e login, ele exibe as alterações, inclusive as alterações de grupos.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/04/2006 22:20:54
|
andre_guitar7
![[Avatar]](/images/avatar/f033ab37c30201f73f142449d037028d.jpg)
Joined: 21/03/2006 12:03:21
Messages: 259
Location: Curitiba - PR
Offline
|
Dá uma olhada no meu LoginAction:
Code:
public class LoginAction extends BaseLoginAction {
private static final MessageContext MSG_CONTEXT = new ClassMessageContext( LoginAction.class );
private static final String INEXISTENT_USER = "Este usuário não existe ou usuário e senha incorretos!";
private static final String EMPTY_USER_FIELD = "Campo usuário está vazio!";
private static final String EMPTY_PASSWORD_FIELD = "Campo senha está vazio";
public String execute() throws Exception {
return this.login();
}
public String login() throws Exception {
String login = input.getStringValue( "login" );
String password = input.getStringValue( "passw" );
if( login == null || login.trim().equals( "" ) ){
this.addError( "login" , EMPTY_USER_FIELD , MSG_CONTEXT );
return ERROR;
}
if( password == null || password.trim().equals( "" ) ){
this.addError( "passw" , EMPTY_PASSWORD_FIELD , MSG_CONTEXT );
return ERROR;
}
PersonManager personManager = new PersonManager( ( PersonDAO ) input.getValue( "personDAO" ) );
Person person = personManager.loadForLoginAndPassword( login , password );
if( person == null ){
this.addError( INEXISTENT_USER , MSG_CONTEXT );
return ERROR;
}else{
this.setUserSession( person );
Iterator it = person.getGroups().iterator();
List groups = new ArrayList();
while( it.hasNext() ){
groups.add( ( ( Group ) it.next() ).getName() );
}
this.setUserGroups( groups );
return SUCCESS;
}
}
}
Talvez tenha alguma coisa errada... tive que inserir os grupos dessa forma pq meu objeto Person retorna um Set de groups e não um List...
Meu Objeto Group:
Code:
public class Group {
private Set persons = new HashSet();
private String name;
public Group(){ }
public Group( String name ){
this.name = name;
}
public void setName( String name ){
this.name = name;
}
public String getName(){
return this.name;
}
public void addPerson( Person person ){
//person.addGroup( this );
this.persons.add( person );
}
public void setPersons( Set persons ){
this.persons = persons;
}
public Set getPersons(){
return this.persons;
}
}
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/04/2006 22:38:15
|
saoj
Joined: 01/07/2005 09:59:17
Messages: 2846
Location: Rio de Janeiro, RJ
Offline
|
Não manjo de hibernate.
Vc tem que descobrir duas coisas:
1) Tem certeza que o admin está fazendo as alterações no banco ?
2) Porque essas alterações não são refletidas no objeto. Provavelmente devido a algum cache do hibernate
|
Sergio Oliveira
|
|
|
 |
|
|