Enhance the default permissions logic

This commit is contained in:
xtaodada
2022-05-16 00:40:10 +08:00
committed by Melledy
parent 21478b0a33
commit 1adffc21c0
3 changed files with 13 additions and 14 deletions

View File

@@ -1,14 +1,12 @@
package emu.grasscutter.game;
import dev.morphia.annotations.*;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.utils.Crypto;
import emu.grasscutter.utils.Utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.*;
import java.util.stream.Stream;
import org.bson.Document;
@@ -144,19 +142,24 @@ public class Account {
}
public boolean hasPermission(String permission) {
if (this.permissions.contains(permission)) return true;
if(this.permissions.contains("*") && this.permissions.size() == 1) return true;
// Add default permissions if it doesn't exist
List<String> permissions = Stream.of(this.permissions, Arrays.asList(ACCOUNT.defaultPermissions))
.flatMap(Collection::stream)
.distinct().toList();
if (permissions.contains(permission)) return true;
String[] permissionParts = permission.split("\\.");
for (String p : this.permissions) {
for (String p : permissions) {
if (p.startsWith("-") && permissionMatchesWildcard(p.substring(1), permissionParts)) return false;
if (permissionMatchesWildcard(p, permissionParts)) return true;
}
return this.permissions.contains("*");
return permissions.contains("*");
}
public boolean removePermission(String permission) {
return this.permissions.remove(permission);
}