Skip to content

Commit 2a89588

Browse files
committed
Check permissions for executors before suggest.
1 parent ca1406c commit 2a89588

File tree

3 files changed

+46
-13
lines changed

3 files changed

+46
-13
lines changed

litecommands-core/src/main/java/dev/rollczi/litecommands/implementation/LiteCommandSection.java

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,18 +111,7 @@ public SuggestionMerger findSuggestion(Invocation<SENDER> invocation, int route)
111111
}
112112
}
113113

114-
root:
115-
for (ArgumentExecutor<SENDER> executor : this.executors()) {
116-
if (executor.meta().getPermissions().isEmpty()) {
117-
continue;
118-
}
119-
120-
for (String permission : executor.meta().getPermissions()) {
121-
if (sender.hasPermission(permission)) {
122-
break root;
123-
}
124-
}
125-
114+
if (!this.hasPermissionToAnyExecutor(invocation.sender())) {
126115
return suggestionMerger;
127116
}
128117

@@ -145,6 +134,12 @@ public SuggestionMerger findSuggestion(Invocation<SENDER> invocation, int route)
145134
LiteInvocation lite = invocation.toLite();
146135

147136
for (ArgumentExecutor<SENDER> argumentExecutor : this.argumentExecutors) {
137+
RequiredPermissions requiredPermissions = RequiredPermissions.of(argumentExecutor.meta(), lite.sender());
138+
139+
if (!requiredPermissions.isEmpty()) {
140+
continue;
141+
}
142+
148143
List<AnnotatedParameter<SENDER, ?>> parameters = argumentExecutor.annotatedParameters();
149144

150145
suggestionMerger.appendRoot(this.suggestionParameters(lite, 0, routeAbove, 0, parameters));
@@ -153,6 +148,28 @@ public SuggestionMerger findSuggestion(Invocation<SENDER> invocation, int route)
153148
return suggestionMerger;
154149
}
155150

151+
private boolean hasPermissionToAnyExecutor(LiteSender liteSender) {
152+
if (this.executors().isEmpty()) {
153+
return true;
154+
}
155+
156+
for (ArgumentExecutor<SENDER> executor : this.argumentExecutors) {
157+
Collection<String> permissions = executor.meta().getPermissions();
158+
159+
if (permissions.isEmpty()) {
160+
return true;
161+
}
162+
163+
for (String permission : permissions) {
164+
if (liteSender.hasPermission(permission)) {
165+
return true;
166+
}
167+
}
168+
}
169+
170+
return false;
171+
}
172+
156173
private SuggestionStack suggestionParameters(LiteInvocation lite, int margin, int routeAbove, int parameterIndex, List<AnnotatedParameter<SENDER, ?>> parameters) {
157174
List<AnnotatedParameter<SENDER, ?>> list = parameters.subList(parameterIndex, parameters.size());
158175
int routeReal = routeAbove + parameterIndex;

litecommands-core/src/test/java/dev/rollczi/litecommands/suggestion/SuggestionWithPermissionTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.rollczi.litecommands.suggestion;
22

3+
import dev.rollczi.litecommands.argument.Arg;
34
import dev.rollczi.litecommands.command.permission.Permission;
45
import dev.rollczi.litecommands.command.route.Route;
56
import dev.rollczi.litecommands.test.TestFactory;
@@ -15,10 +16,16 @@ public class SuggestionWithPermissionTest {
1516
@Permission("permission.test")
1617
static class Command {
1718

19+
enum TestEnum { A, B }
20+
1821
@Route(name = "a")
1922
@Permission("test.a")
2023
void a() {}
2124

25+
@Route(name = "a")
26+
@Permission("test.a.withArg")
27+
void a(@Arg TestEnum testEnum) {}
28+
2229
@Route(name = "b")
2330
@Permission("test.b")
2431
void b() {}
@@ -45,5 +52,14 @@ void testWithPermission() {
4552
.assertWith("a", "b");
4653
}
4754

55+
@Test
56+
void testWithExecutor() {
57+
platform.suggest(TestPermissionSender.with("permission.test", "test.a.withArg"), "test", "a", "")
58+
.assertWith("A", "B");
59+
60+
platform.suggest(TestPermissionSender.with("permission.test", "test.a"), "test", "a", "")
61+
.assertWith();
62+
}
63+
4864

4965
}

litecommands-core/src/test/java/dev/rollczi/litecommands/test/AssertSuggest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public void assertNonEmpty() {
2525
public void assertWith(String... suggestions) {
2626
List<String> suggestionSet = this.suggestions.multilevelSuggestions();
2727

28-
Assertions.assertEquals(suggestionSet.size(), suggestions.length);
28+
Assertions.assertEquals(suggestions.length, suggestionSet.size());
2929

3030
for (String suggestion : suggestions) {
3131
Assertions.assertTrue(suggestionSet.contains(suggestion), "Suggestion '" + suggestion + "' not found! " + String.join(", ", suggestionSet));

0 commit comments

Comments
 (0)