Skip to content

Commit

Permalink
Enhance the default permissions logic
Browse files Browse the repository at this point in the history
  • Loading branch information
omg-xtao authored and Melledy committed May 17, 2022
1 parent 21478b0 commit 1adffc2
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 14 deletions.
4 changes: 0 additions & 4 deletions src/main/java/emu/grasscutter/auth/DefaultAuthenticators.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,6 @@ public static class PasswordAuthenticator implements Authenticator<LoginResultJs
responseMessage = translate("messages.dispatch.account.username_create_error");
Grasscutter.getLogger().info(translate("messages.dispatch.account.account_login_create_error", address));
} else {
// Add default permissions.
for (var permission : ACCOUNT.defaultPermissions)
account.addPermission(permission);

// Continue with login.
successfulLogin = true;

Expand Down
21 changes: 12 additions & 9 deletions src/main/java/emu/grasscutter/game/Account.java
Original file line number Diff line number Diff line change
@@ -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;

Expand Down Expand Up @@ -144,19 +142,24 @@ public static boolean permissionMatchesWildcard(String wildcard, String[] permis
}

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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public final class GachaHandler implements Router {
private final String gachaMappings;

public GachaHandler() {
this.gachaMappings = Utils.toFilePath(DATA("/gacha/mappings.js"));
this.gachaMappings = Utils.toFilePath(DATA("gacha/mappings.js"));
if(!(new File(this.gachaMappings).exists())) {
try {
Tools.createGachaMapping(this.gachaMappings);
Expand Down

0 comments on commit 1adffc2

Please sign in to comment.