[Logo] Mentawai Forum - Mentawai Web Framework
  [Search] Search   [Recent Topics] Recent Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Trocar usuário de grupo  XML
Forum Index -> Comentários Gerais
Author Message
andre_guitar7


[Avatar]

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
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

andre_guitar7


[Avatar]

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?
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

andre_guitar7


[Avatar]

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.

andre_guitar7


[Avatar]

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;
 	}
 
 }
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

 
Forum Index -> Comentários Gerais
Go to:   
Powered by JForum 2.1.6 © JForum Team