Skip to content
Snippets Groups Projects
Commit 1adffc21 authored by xtaodada's avatar xtaodada Committed by Melledy
Browse files

Enhance the default permissions logic

parent 21478b0a
No related merge requests found
...@@ -41,10 +41,6 @@ public final class DefaultAuthenticators { ...@@ -41,10 +41,6 @@ public final class DefaultAuthenticators {
responseMessage = translate("messages.dispatch.account.username_create_error"); responseMessage = translate("messages.dispatch.account.username_create_error");
Grasscutter.getLogger().info(translate("messages.dispatch.account.account_login_create_error", address)); Grasscutter.getLogger().info(translate("messages.dispatch.account.account_login_create_error", address));
} else { } else {
// Add default permissions.
for (var permission : ACCOUNT.defaultPermissions)
account.addPermission(permission);
// Continue with login. // Continue with login.
successfulLogin = true; successfulLogin = true;
......
package emu.grasscutter.game; package emu.grasscutter.game;
import dev.morphia.annotations.*; import dev.morphia.annotations.*;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.database.DatabaseHelper; import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.utils.Crypto; import emu.grasscutter.utils.Crypto;
import emu.grasscutter.utils.Utils; import emu.grasscutter.utils.Utils;
import java.util.ArrayList; import java.util.*;
import java.util.List; import java.util.stream.Stream;
import java.util.Locale;
import org.bson.Document; import org.bson.Document;
...@@ -144,19 +142,24 @@ public class Account { ...@@ -144,19 +142,24 @@ public class Account {
} }
public boolean hasPermission(String permission) { public boolean hasPermission(String permission) {
if (this.permissions.contains(permission)) return true;
if(this.permissions.contains("*") && this.permissions.size() == 1) 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("\\."); String[] permissionParts = permission.split("\\.");
for (String p : this.permissions) { for (String p : permissions) {
if (p.startsWith("-") && permissionMatchesWildcard(p.substring(1), permissionParts)) return false; if (p.startsWith("-") && permissionMatchesWildcard(p.substring(1), permissionParts)) return false;
if (permissionMatchesWildcard(p, permissionParts)) return true; if (permissionMatchesWildcard(p, permissionParts)) return true;
} }
return this.permissions.contains("*"); return permissions.contains("*");
} }
public boolean removePermission(String permission) { public boolean removePermission(String permission) {
return this.permissions.remove(permission); return this.permissions.remove(permission);
} }
......
...@@ -32,7 +32,7 @@ public final class GachaHandler implements Router { ...@@ -32,7 +32,7 @@ public final class GachaHandler implements Router {
private final String gachaMappings; private final String gachaMappings;
public GachaHandler() { public GachaHandler() {
this.gachaMappings = Utils.toFilePath(DATA("/gacha/mappings.js")); this.gachaMappings = Utils.toFilePath(DATA("gacha/mappings.js"));
if(!(new File(this.gachaMappings).exists())) { if(!(new File(this.gachaMappings).exists())) {
try { try {
Tools.createGachaMapping(this.gachaMappings); Tools.createGachaMapping(this.gachaMappings);
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment