View Javadoc
1   package net.avcompris.examples.shared3;
2   
3   import static com.google.common.base.Preconditions.checkNotNull;
4   import static net.avcompris.examples.shared3.Permission.ANY;
5   import static net.avcompris.examples.shared3.Permission.CREATE_ANY_USER;
6   import static net.avcompris.examples.shared3.Permission.DELETE_ANY_USER;
7   import static net.avcompris.examples.shared3.Permission.GET_ANY_USER;
8   import static net.avcompris.examples.shared3.Permission.GET_ANY_USER_SESSION;
9   import static net.avcompris.examples.shared3.Permission.GET_MY_SESSION;
10  import static net.avcompris.examples.shared3.Permission.GET_USER_ME;
11  import static net.avcompris.examples.shared3.Permission.PURGE_CORRELATION_IDS;
12  import static net.avcompris.examples.shared3.Permission.QUERY_ALL_USERS;
13  import static net.avcompris.examples.shared3.Permission.ROUTE;
14  import static net.avcompris.examples.shared3.Permission.SET_LAST_ACTIVE_AT;
15  import static net.avcompris.examples.shared3.Permission.TERMINATE_ANY_USER_SESSION;
16  import static net.avcompris.examples.shared3.Permission.TERMINATE_MY_SESSION;
17  import static net.avcompris.examples.shared3.Permission.UPDATE_ANY_USER;
18  import static net.avcompris.examples.shared3.Permission.UPDATE_USER_ME;
19  import static net.avcompris.examples.shared3.Permission.WORKERS;
20  
21  import javax.annotation.Nullable;
22  
23  import org.apache.commons.lang3.ArrayUtils;
24  
25  import net.avcompris.commons3.api.EnumRole;
26  
27  public enum Role implements EnumRole {
28  
29  	ANONYMOUS(null,
30  
31  			ANY //
32  	// GET_APP_INFO //
33  	),
34  
35  	REGULAR(new Role[] { ANONYMOUS },
36  
37  			SET_LAST_ACTIVE_AT, GET_MY_SESSION, TERMINATE_MY_SESSION, //
38  			GET_USER_ME, UPDATE_USER_ME //
39  	),
40  
41  	USERMGR(new Role[] { REGULAR },
42  
43  			QUERY_ALL_USERS, //
44  			CREATE_ANY_USER, GET_ANY_USER, UPDATE_ANY_USER, DELETE_ANY_USER, //
45  			GET_ANY_USER_SESSION, //
46  			TERMINATE_ANY_USER_SESSION //
47  	),
48  
49  	SILENT_WORKER(new Role[] { ANONYMOUS },
50  
51  			ROUTE),
52  
53  	ADMIN(new Role[] { USERMGR, SILENT_WORKER },
54  
55  			PURGE_CORRELATION_IDS, WORKERS),
56  
57  	SUPERADMIN(new Role[] { ADMIN },
58  
59  			Permission.SUPERADMIN);
60  
61  	private final Role[] superRoles;
62  	private final Permission[] permissions;
63  
64  	Role(@Nullable final Role[] superRoles, final Permission... permissions) {
65  
66  		this.superRoles = (superRoles != null) ? superRoles : new Role[0];
67  		this.permissions = checkNotNull(permissions, "permissions");
68  	}
69  
70  	public String getRolename() {
71  
72  		return name();
73  	}
74  
75  	@Override
76  	public Role[] getSuperRoles() {
77  
78  		return ArrayUtils.clone(superRoles);
79  	}
80  
81  	@Override
82  	public Permission[] getPermissions() {
83  
84  		return ArrayUtils.clone(permissions);
85  	}
86  
87  	public boolean canManage(final Role role) {
88  
89  		checkNotNull(role, "role");
90  
91  		switch (this) {
92  		case SUPERADMIN:
93  			return true;
94  		case ADMIN:
95  			switch (role) {
96  			case ADMIN:
97  			case SILENT_WORKER:
98  				return true;
99  			default:
100 				break;
101 			}
102 		case USERMGR:
103 			switch (role) {
104 			case USERMGR:
105 				return true;
106 			default:
107 				break;
108 			}
109 		default:
110 			return false;
111 		}
112 	}
113 }