Offer the server groups we have the power for, not only those needing none

canToggleGroup compared a group's needed member add/remove power with our own
i_group_needed_member_*_power, which the server never reports for us: our
power is i_group_member_add_power and i_group_member_remove_power. An admin
was only ever offered groups that need no power at all.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-30 22:21:43 +00:00
parent b1ad403fdf
commit b678805c37
2 changed files with 7 additions and 7 deletions

View File

@@ -147,7 +147,7 @@ public final class ServerModel {
/**
* The local client's resolved value for a named permission (e.g.
* {@code "i_group_needed_member_add_power"}), or {@code 0} if it isn't known
* {@code "i_group_member_add_power"}), or {@code 0} if it isn't known
* yet (the {@code permissionlist} request is still in flight, or the server
* never reported a non-default value for it).
*/
@@ -175,9 +175,9 @@ public final class ServerModel {
* unlimited power can only be touched by a local client that has it.
*/
public synchronized boolean canToggleGroup(Group group, boolean assigned) {
return hasPower(group.neededMemberAddPower, selfPermissionValue("i_group_needed_member_add_power"))
return hasPower(group.neededMemberAddPower, selfPermissionValue("i_group_member_add_power"))
&& (!assigned || hasPower(group.neededMemberRemovePower,
selfPermissionValue("i_group_needed_member_remove_power")));
selfPermissionValue("i_group_member_remove_power")));
}
private static boolean hasPower(int needed, int own) {

View File

@@ -26,8 +26,8 @@ class ServerModelRulesTest {
@Test
void groupNeedsEnoughAddPowerAndRemovePowerToTakeAway() {
grant("i_group_needed_member_add_power", 50);
grant("i_group_needed_member_remove_power", 20);
grant("i_group_member_add_power", 50);
grant("i_group_member_remove_power", 20);
assertTrue(model.canToggleGroup(group(50, 0), false));
assertFalse(model.canToggleGroup(group(51, 0), false));
@@ -37,8 +37,8 @@ class ServerModelRulesTest {
@Test
void unlimitedPowerIsMinusOneOnEitherSide() {
grant("i_group_needed_member_add_power", 75);
grant("i_group_needed_member_remove_power", -1);
grant("i_group_member_add_power", 75);
grant("i_group_member_remove_power", -1);
assertFalse(model.canToggleGroup(group(-1, 0), false), "a group needing unlimited power");
assertTrue(model.canToggleGroup(group(75, 1000), true), "unlimited remove power");