Skip to content
This repository was archived by the owner on Jun 7, 2022. It is now read-only.

Commit 85cf75a

Browse files
author
Tarek
committed
added * permission alias
1 parent 5cc0664 commit 85cf75a

File tree

1 file changed

+41
-54
lines changed

1 file changed

+41
-54
lines changed

cloudnet-lib/src/main/java/de/dytanic/cloudnet/lib/player/permission/PermissionEntity.java

Lines changed: 41 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
import lombok.Getter;
66
import lombok.Setter;
77

8-
import java.util.Arrays;
98
import java.util.Collection;
10-
import java.util.List;
9+
import java.util.Map;
1110
import java.util.UUID;
1211

1312
/**
@@ -17,10 +16,13 @@
1716
@Getter
1817
@Setter
1918
public class PermissionEntity {
19+
2020
protected UUID uniqueId;
21+
2122
protected java.util.Map<String, Boolean> permissions;
2223

2324
protected String prefix;
25+
2426
@Setter
2527
protected String suffix;
2628

@@ -33,70 +35,35 @@ public boolean hasPermission(PermissionPool permissionPool, String permission, S
3335

3436
if (permissionPool == null || permission == null) return false;
3537

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-
4338
if (permissions.containsKey(permission) && !permissions.get(permission))
4439
return false;
45-
else if (adminPermission != null && permissions.containsKey(adminPermission) && !permissions.get(adminPermission))
46-
return false;
40+
else if (hasWildcardPermission(permission))
41+
return true;
4742
else if (permissions.containsKey("*") && permissions.get("*"))
4843
return true;
4944
else if ((permissions.containsKey(permission)) && permissions.get(permission)) return true;
50-
else if (adminPermission != null && permissions.containsKey(adminPermission) && permissions.get(adminPermission))
51-
return true;
5245

5346
for (GroupEntityData implg : groups)
5447
{
5548
if (!permissionPool.getGroups().containsKey(implg.getGroup())) continue;
5649
PermissionGroup permissionGroup = permissionPool.getGroups().get(implg.getGroup());
5750

58-
if (checkAdminPermission(permissionGroup, permission)) return true;
51+
if (hasWildcardPermission(permissionGroup, permission, group)) return true;
5952

60-
if (checkAccess(permissionGroup, permission, adminPermission, group)) return true;
53+
if (checkAccess(permissionGroup, permission, group)) return true;
6154

6255
for (String implGroup : permissionGroup.getImplementGroups())
6356
{
6457
if (!permissionPool.getGroups().containsKey(implGroup)) continue;
6558

6659
PermissionGroup subGroup = permissionPool.getGroups().get(implGroup);
67-
if (checkAccess(subGroup, permission, adminPermission, group)) return true;
60+
if (checkAccess(subGroup, permission, group)) return true;
6861
}
69-
7062
}
7163

7264
return false;
7365
}
7466

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-
10067
public PermissionGroup getHighestPermissionGroup(PermissionPool permissionPool)
10168
{
10269
PermissionGroup permissionGroup = null;
@@ -128,27 +95,47 @@ public void setPrefix(String prefix)
12895

12996
/*= -------------------------------------------------------------------------------- =*/
13097

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)
132113
{
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("*")) ||
136124
(permissionGroup.getPermissions().containsKey(permission) && !permissionGroup.getPermissions().get(permission)))
137125
return false;
138126

139127
if ((permissionGroup.getPermissions().containsKey("*") && permissionGroup.getPermissions().get("*")))
140128
return true;
141129

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)))
144131
return true;
145132

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

153140
return false;
154141
}

0 commit comments

Comments
 (0)