Collection Map

6 respostas
ricardocomp

Olá galera,
eu estou tentando
usar o Map para mapear o valor da lista groupUserList
a chave "read".

public class ManagerPermission {

	private List<String> groupUserList = new ArrayList<String>();
	private List<String> groupOperationList = new ArrayList<String>();
	private Map<String,List<String>> permissionGroupMap = new HashMap<String,List<String>>();
	
	public ManagerPermission(){
		permissionGroupMap.put("read", groupUserList);
		permissionGroupMap.put("delete", groupUserList);
		permissionGroupMap.put("write", groupUserList);
		permissionGroupMap.put("create", groupUserList);
		permissionGroupMap.put("adduser", groupUserList);
		permissionGroupMap.put("deluser", groupUserList);
	}
	
}

Só que eu estou com um problema,
groupUserList tem os grupos: "admin", "manager", "user".
Só que admin tem permissão para: "read", "delete", "write", "create", "adduser", "deluser".
manager tem permissões: "read", "delete", "write", "create".
user só tem permissão: "read".

Neste caso todos os grupos vão ter todas as permissões,
alguém sabe como que eu faço para controlar essas permissões com
os seus devidos grupos?

Será que alguém poderia me ajudar?

6 Respostas

B

Você vai precisar de uma lista de grupos de usuários, sendo que cada grupo já é uma lista de usuários. Não quer fazer uma classe p/ representar o grupo?

ricardocomp

Valeu Bruno pela ajuda,
o q eu estou tentando fazer é:

public class ManagerPermission {

	private List<String> groupsExecuteRead = new ArrayList<String>();
	private List<String> groupsExecuteDelete = new ArrayList<String>();
	private List<String> groupsExecuteWrite = new ArrayList<String>();
	private List<String> groupsExecuteCreate = new ArrayList<String>();
	private List<String> groupExecuteAddUser = new ArrayList<String>();
	private List<String> groupExecuteDelUser = new ArrayList<String>();
	
	private Map<String,List<String>> permissionGroupMap = new HashMap<String,List<String>>();
	
	public ManagerPermission(){
		
		groupsExecuteRead.add("admin");
		groupsExecuteRead.add("manager");
		groupsExecuteRead.add("user");
		
		groupsExecuteDelete.add("admin");
		groupsExecuteDelete.add("manager");
		
		groupsExecuteWrite.add("admin");
		groupsExecuteWrite.add("manager");
		
		groupsExecuteCreate.add("admin");
		groupsExecuteCreate.add("manager");
		
		groupExecuteAddUser.add("admin");
		
		groupExecuteDelUser.add("admin");
		
		permissionGroupMap.put("read", groupsExecuteRead);
		permissionGroupMap.put("delete", groupsExecuteDelete);
		permissionGroupMap.put("write", groupsExecuteWrite);
		permissionGroupMap.put("create", groupsExecuteCreate);
		permissionGroupMap.put("adduser", groupExecuteAddUser);
		permissionGroupMap.put("deluser", groupExecuteDelUser);
		
	}
	
	public User getGroup(String group) {
		for (Map : ) {
			if (permissionGroupMap.get(group)) {
				return group;
			}
		}
		return null;
	}
	
}
Agora eu estou com outro problema, vc ou alguém sabe como que eu faço um foreach para um Map? Estou precisando construir o método getGroup, mas não estou conseguindo será q vc ou alguém pode me ajudar?

Abraço.

M

O que o método getGroup deve fazer? Na assinatura indica que retorna um User mas retorna group (uma String).

Dê mais detalhes sobre o que você quer fazer com esse método.

ricardocomp

Então marcobiscaro2112, me desculpa eu errei porque estava
fazendo os meus testes na verade este método precisa retornar
uma String que vai indicar o grupo que eu preciso.

public String getUser(String group) {
		for (User user: permissionGroupMap) {
			if (permissionGroupMap.get(group)) {
				return group;
			}
		}
		return null;
	}
B

A tua primeira modelagem não satisfazia o negócio, mas acho que essa última piorou muito, criar uma variável pra cada coisa é uma bomba esperando estourar.

Talvez eu esteja querendo matar uma mosca com um canhão, mas dê uma olhada em “Controle de acesso baseado em papéis” ou em inglês “Role-based access control”(RBAC). Pode ser muito hoje, mas te dá idéias para amanhã.

Crie mais classes e generalize o teu modelo para funcionar com qualquer tipo e número de permissões, usuários, grupos e papéis.

ricardocomp

Jóia Bruno?
Então eu cheguei a dar uma olhada no RBCA,
mas por enquanto eu preciso terminar o que
eu estou fazendo primeiro para depois dar uma
otimizada no meu código, acho que se eu colocar
as listas como variáveis do construtor ao invés
de coloca-lás como atributo da classe talvez
já dê alguma otimizada não?
Eu estou tentando construir um outro método
agora para me ajudar, será que teria como você ou
alguém me ajudar a construir este método?

no groupUserList que eu estou usando como parâmetro
eu tenho uma lista deste tipo:
[admin, manager, user], por exemplo.Ou seja, um
usuário pode pertencer a mais de um grupo.

public class PermissionManager {
	
	private Map<String,List<String>> permissionGroupMap = new HashMap<String,List<String>>();
	
	public PermissionManager(){
		
		List<String> groupsExecuteRead = new ArrayList<String>();
		List<String> groupsExecuteDelete = new ArrayList<String>();
		List<String> groupsExecuteWrite = new ArrayList<String>();
		List<String> groupsExecuteCreate = new ArrayList<String>();
		List<String> groupExecuteAddUser = new ArrayList<String>();
		List<String> groupExecuteDelUser = new ArrayList<String>();
		
		groupsExecuteRead.add("admin");
		groupsExecuteRead.add("manager");
		groupsExecuteRead.add("user");
		
		groupsExecuteDelete.add("admin");
		groupsExecuteDelete.add("manager");
		
		groupsExecuteWrite.add("admin");
		groupsExecuteWrite.add("manager");
		
		groupsExecuteCreate.add("admin");
		groupsExecuteCreate.add("manager");
		
		groupExecuteAddUser.add("admin");
		
		groupExecuteDelUser.add("admin");
		
		permissionGroupMap.put("read", groupsExecuteRead);
		permissionGroupMap.put("delete", groupsExecuteDelete);
		permissionGroupMap.put("write", groupsExecuteWrite);
		permissionGroupMap.put("create", groupsExecuteCreate);
		permissionGroupMap.put("adduser", groupExecuteAddUser);
		permissionGroupMap.put("deluser", groupExecuteDelUser);
		
	}
	
	public boolean authorize(List<String> groupUserList){
		return false;
	}
	
	
}
Criado 16 de dezembro de 2008
Ultima resposta 17 de dez. de 2008
Respostas 6
Participantes 3