5
5
import lombok .Getter ;
6
6
import lombok .Setter ;
7
7
8
- import java .util .Arrays ;
9
8
import java .util .Collection ;
10
- import java .util .List ;
9
+ import java .util .Map ;
11
10
import java .util .UUID ;
12
11
13
12
/**
17
16
@ Getter
18
17
@ Setter
19
18
public class PermissionEntity {
19
+
20
20
protected UUID uniqueId ;
21
+
21
22
protected java .util .Map <String , Boolean > permissions ;
22
23
23
24
protected String prefix ;
25
+
24
26
@ Setter
25
27
protected String suffix ;
26
28
@@ -33,70 +35,35 @@ public boolean hasPermission(PermissionPool permissionPool, String permission, S
33
35
34
36
if (permissionPool == null || permission == null ) return false ;
35
37
36
- if (checkAdminPermission (permission )) return true ;
37
-
38
- String adminPermission = null ;
39
- String [] block = permission .split ("\\ ." );
40
-
41
- if (block .length > 1 ) adminPermission = block [0 ] + ".*" ;
42
-
43
38
if (permissions .containsKey (permission ) && !permissions .get (permission ))
44
39
return false ;
45
- else if (adminPermission != null && permissions . containsKey ( adminPermission ) && ! permissions . get ( adminPermission ))
46
- return false ;
40
+ else if (hasWildcardPermission ( permission ))
41
+ return true ;
47
42
else if (permissions .containsKey ("*" ) && permissions .get ("*" ))
48
43
return true ;
49
44
else if ((permissions .containsKey (permission )) && permissions .get (permission )) return true ;
50
- else if (adminPermission != null && permissions .containsKey (adminPermission ) && permissions .get (adminPermission ))
51
- return true ;
52
45
53
46
for (GroupEntityData implg : groups )
54
47
{
55
48
if (!permissionPool .getGroups ().containsKey (implg .getGroup ())) continue ;
56
49
PermissionGroup permissionGroup = permissionPool .getGroups ().get (implg .getGroup ());
57
50
58
- if (checkAdminPermission (permissionGroup , permission )) return true ;
51
+ if (hasWildcardPermission (permissionGroup , permission , group )) return true ;
59
52
60
- if (checkAccess (permissionGroup , permission , adminPermission , group )) return true ;
53
+ if (checkAccess (permissionGroup , permission , group )) return true ;
61
54
62
55
for (String implGroup : permissionGroup .getImplementGroups ())
63
56
{
64
57
if (!permissionPool .getGroups ().containsKey (implGroup )) continue ;
65
58
66
59
PermissionGroup subGroup = permissionPool .getGroups ().get (implGroup );
67
- if (checkAccess (subGroup , permission , adminPermission , group )) return true ;
60
+ if (checkAccess (subGroup , permission , group )) return true ;
68
61
}
69
-
70
62
}
71
63
72
64
return false ;
73
65
}
74
66
75
- private boolean checkAdminPermission (String permission )
76
- {
77
- List <String > parts = Arrays .asList (permission .split ("\\ ." ));
78
- if (parts .size () < 2 ) return false ;
79
- for (int i = parts .size () - 2 ; i >= 1 ; i --)
80
- {
81
- String perm = String .join ("." , parts .subList (0 , i )) + ".*" ;
82
- if (permissions .containsKey (perm )) return permissions .get (perm );
83
- }
84
- return false ;
85
- }
86
-
87
- private boolean checkAdminPermission (PermissionGroup permissionGroup , String permission )
88
- {
89
- List <String > parts = Arrays .asList (permission .split ("\\ ." ));
90
- if (parts .size () < 2 ) return false ;
91
- for (int i = parts .size () - 2 ; i >= 1 ; i --)
92
- {
93
- String perm = String .join ("." , parts .subList (0 , i )) + ".*" ;
94
- if (permissionGroup .permissions .containsKey (perm ))
95
- return permissionGroup .permissions .get (perm );
96
- }
97
- return false ;
98
- }
99
-
100
67
public PermissionGroup getHighestPermissionGroup (PermissionPool permissionPool )
101
68
{
102
69
PermissionGroup permissionGroup = null ;
@@ -128,27 +95,47 @@ public void setPrefix(String prefix)
128
95
129
96
/*= -------------------------------------------------------------------------------- =*/
130
97
131
- private boolean checkAccess (PermissionGroup permissionGroup , String permission , String adminPermission , String group )
98
+ private boolean hasWildcardPermission (PermissionGroup permissionGroup , String permission , String group )
99
+ {
100
+ for (Map .Entry <String , Boolean > entry : permissionGroup .getPermissions ().entrySet ())
101
+ if (entry .getKey ().endsWith ("*" ) && entry .getKey ().length () > 1 && permission .startsWith (entry .getKey ().substring (0 , entry .getKey ().length () - 1 )))
102
+ return true ;
103
+
104
+ if (group != null && permissionGroup .getServerGroupPermissions ().containsKey (group ))
105
+ for (String perms : permissionGroup .getServerGroupPermissions ().get (group ))
106
+ if (perms .endsWith ("*" ) && perms .length () > 1 && permission .startsWith (perms .substring (0 , perms .length () - 1 )))
107
+ return true ;
108
+
109
+ return false ;
110
+ }
111
+
112
+ private boolean hasWildcardPermission (String permission )
132
113
{
133
- if ((adminPermission != null && (permissionGroup .getPermissions ().containsKey (adminPermission ) &&
134
- !permissionGroup .getPermissions ().get (adminPermission ))) ||
135
- (permissionGroup .getPermissions ().containsKey ("*" ) && !permissionGroup .getPermissions ().get ("*" )) ||
114
+ for (Map .Entry <String , Boolean > entry : getPermissions ().entrySet ())
115
+ if (entry .getKey ().endsWith ("*" ) && entry .getKey ().length () > 1 && permission .startsWith (entry .getKey ().substring (0 , entry .getKey ().length () - 1 )))
116
+ return true ;
117
+
118
+ return false ;
119
+ }
120
+
121
+ private boolean checkAccess (PermissionGroup permissionGroup , String permission , String group )
122
+ {
123
+ if ((permissionGroup .getPermissions ().containsKey ("*" ) && !permissionGroup .getPermissions ().get ("*" )) ||
136
124
(permissionGroup .getPermissions ().containsKey (permission ) && !permissionGroup .getPermissions ().get (permission )))
137
125
return false ;
138
126
139
127
if ((permissionGroup .getPermissions ().containsKey ("*" ) && permissionGroup .getPermissions ().get ("*" )))
140
128
return true ;
141
129
142
- if ((permissionGroup .getPermissions ().containsKey (permission ) && permissionGroup .getPermissions ().get (permission )) ||
143
- (adminPermission != null && (permissionGroup .getPermissions ().containsKey (adminPermission ) && permissionGroup .getPermissions ().get (adminPermission ))))
130
+ if ((permissionGroup .getPermissions ().containsKey (permission ) && permissionGroup .getPermissions ().get (permission )))
144
131
return true ;
145
132
146
- if (permissionGroup . getServerGroupPermissions (). containsKey ( group ) )
147
- {
148
- return permissionGroup . getServerGroupPermissions (). get ( group ). contains ( permission ) ||
149
- permissionGroup .getServerGroupPermissions ().get (group ).contains ("*" )
150
- || ( adminPermission != null && permissionGroup .getServerGroupPermissions ().get (group ).contains (adminPermission ) );
151
- }
133
+ if (group != null )
134
+ if ( permissionGroup . getServerGroupPermissions (). containsKey ( group ))
135
+ {
136
+ return permissionGroup .getServerGroupPermissions ().get (group ).contains (permission ) ||
137
+ permissionGroup .getServerGroupPermissions ().get (group ).contains ("*" );
138
+ }
152
139
153
140
return false ;
154
141
}
0 commit comments