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:
@@ -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) {
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user