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