Project

General

Profile

« Previous | Next » 

Revision abdd1a06

Added by Katja Luther about 13 years ago

Permissionevaluation classes

View differences:

.gitattributes
701 701
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/package-info.java -text
702 702
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/package.html -text
703 703
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/overview.html -text
704
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/permissionEval/CdmPermission.java -text
705
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/permissionEval/CdmPermissionEvaluator.java -text
706
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/permissionEval/EvalClass.java -text
704 707
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/reference/IArticle.java -text
705 708
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/reference/IBook.java -text
706 709
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/reference/IBookSection.java -text
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/permissionEval/CdmPermission.java
1
package eu.etaxonomy.cdm.model.permissionEval;
2

  
3
import java.security.acl.Permission;
4

  
5
public enum CdmPermission {
6
	CREATE, READ, DELETE, EDIT, PUBLISH, ANNOTATE , CHECKANNOTATION;
7
	
8
	
9
	
10
	
11
}
12

  
13

  
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/permissionEval/CdmPermissionEvaluator.java
1
package eu.etaxonomy.cdm.model.permissionEval;
2

  
3
import java.io.Serializable;
4
import java.util.Collection;
5
import java.util.HashSet;
6
import java.util.List;
7
import java.util.Set;
8
import java.util.UUID;
9

  
10
import org.joda.time.DateTime;
11
import org.springframework.security.access.PermissionEvaluator;
12
import org.springframework.security.core.Authentication;
13
import org.springframework.security.core.GrantedAuthority;
14

  
15
import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
16
import eu.etaxonomy.cdm.model.common.CdmBase;
17
import eu.etaxonomy.cdm.model.common.Group;
18
import eu.etaxonomy.cdm.model.common.User;
19
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
20
public class CdmPermissionEvaluator implements PermissionEvaluator {
21

  
22
private class AuthorityPermission{
23
	String className;
24
	CdmPermission permission;
25
	UUID targetUuid;
26
	
27
	public AuthorityPermission(String className, CdmPermission permission, UUID uuid){
28
		this.className = className;
29
		this.permission = permission;
30
		targetUuid = uuid;
31
	}
32
	
33
	public AuthorityPermission (String authority){
34
		String permissionString;
35
		int firstPoint = authority.indexOf(".");
36
		if (firstPoint == -1){
37
			className = authority;
38
		}else{
39
			className = authority.substring(0, firstPoint);
40
			int bracket = authority.indexOf("{");
41
			if (bracket == -1){
42
				permissionString = authority.substring(firstPoint+1);
43
			}else{
44
				permissionString = authority.substring(firstPoint+1, bracket);
45
				int secondBracket = authority.indexOf("}");
46
				String uuid = authority.substring(bracket+1, secondBracket);
47
				targetUuid = UUID.fromString(uuid);
48
			}
49
			permission = CdmPermission.valueOf(permissionString.toUpperCase());
50
		}
51
	}
52
	
53
	
54
}
55
	public boolean hasPermission(Authentication authentication,
56
			Object targetDomainObject, Object permission) {
57
		
58
		String permissionString = (String)permission;
59
		
60
		Collection<GrantedAuthority> authorities = authentication.getAuthorities();
61
		Set<Group> groups =((User)authentication.getPrincipal()).getGroups();
62
		Set<GrantedAuthority> groupAuthorities = new HashSet<GrantedAuthority>();
63
		for (Group group: groups){
64
			groupAuthorities.addAll(group.getGrantedAuthorities());
65
		}
66
		groupAuthorities.addAll(authorities);
67
		
68
		
69
		AuthorityPermission evalPermission = new AuthorityPermission(targetDomainObject.getClass().getSimpleName(), CdmPermission.valueOf(permissionString), ((CdmBase)targetDomainObject).getUuid());
70
		
71
		for (GrantedAuthority authority: groupAuthorities){
72
			AuthorityPermission authorityPermission= new AuthorityPermission(authority.getAuthority());
73
			
74
			//evaluate authorities
75
			if (authorityPermission.className.equals(evalPermission.className) && authorityPermission.permission.equals(evalPermission.permission)){
76
				if (authorityPermission.targetUuid != null){
77
					//TODO
78
					
79
				}else{
80
					return true;
81
				}
82
				
83
			}
84
			
85
			
86
						
87
			if (authorityPermission.targetUuid != null){
88
				if (authorityPermission.targetUuid.equals(((CdmBase)targetDomainObject).getUuid())){
89
					if (authorityPermission.permission.equals(permission)){
90
						return true;
91
					}
92
				}
93
			}else{
94
				if ((authorityPermission.className.equals(targetDomainObject.getClass().getName())|| (authorityPermission.className.equals(targetDomainObject.getClass().getSuperclass().getName()) )&& authorityPermission.permission.equals(CdmPermission.valueOf(permissionString)))){
95
					return true;
96
				}
97
			}
98
			if (authorityPermission.className.equals("TaxonNode") && targetDomainObject.getClass().equals(TaxonNode.class)){
99
				//TODO: walk through the tree and look for the uuid
100
				TaxonNode node = (TaxonNode)targetDomainObject;
101
				TaxonNode targetNode = findTargetUuidInTree(authorityPermission.targetUuid, node);
102
				if (targetNode != null){
103
					if (permission.equals(authorityPermission.permission)){
104
						return true;
105
					}
106
				}
107
			}
108
			
109
			
110
			
111
			
112
				
113
		}
114
				
115
		// TODO Auto-generated method stub
116
		return false;
117
	}
118

  
119
	private TaxonNode findTargetUuidInTree(UUID targetUuid, TaxonNode node){
120
		if (targetUuid.equals(node.getUuid()))
121
			return node;
122
		else if (node.getParent()!= null){
123
			findTargetUuidInTree(targetUuid, node.getParent());
124
		}
125
		return null;
126
	}
127

  
128
	public boolean hasPermission(Authentication authentication,
129
			Serializable targetId, String targetType, Object permission) {
130
		System.out.println("hasPermission returns false");
131
		// TODO Auto-generated method stub
132
		return false;
133
	}
134

  
135
}
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/permissionEval/EvalClass.java
1
package eu.etaxonomy.cdm.model.permissionEval;
2

  
3
public enum EvalClass {
4
	USER, TAXONNODE, DESCRIPTION;
5
}

Also available in: Unified diff