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.
|
* 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
|
* yet (the {@code permissionlist} request is still in flight, or the server
|
||||||
* never reported a non-default value for it).
|
* 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.
|
* unlimited power can only be touched by a local client that has it.
|
||||||
*/
|
*/
|
||||||
public synchronized boolean canToggleGroup(Group group, boolean assigned) {
|
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,
|
&& (!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) {
|
private static boolean hasPower(int needed, int own) {
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ class ServerModelRulesTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void groupNeedsEnoughAddPowerAndRemovePowerToTakeAway() {
|
void groupNeedsEnoughAddPowerAndRemovePowerToTakeAway() {
|
||||||
grant("i_group_needed_member_add_power", 50);
|
grant("i_group_member_add_power", 50);
|
||||||
grant("i_group_needed_member_remove_power", 20);
|
grant("i_group_member_remove_power", 20);
|
||||||
|
|
||||||
assertTrue(model.canToggleGroup(group(50, 0), false));
|
assertTrue(model.canToggleGroup(group(50, 0), false));
|
||||||
assertFalse(model.canToggleGroup(group(51, 0), false));
|
assertFalse(model.canToggleGroup(group(51, 0), false));
|
||||||
@@ -37,8 +37,8 @@ class ServerModelRulesTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void unlimitedPowerIsMinusOneOnEitherSide() {
|
void unlimitedPowerIsMinusOneOnEitherSide() {
|
||||||
grant("i_group_needed_member_add_power", 75);
|
grant("i_group_member_add_power", 75);
|
||||||
grant("i_group_needed_member_remove_power", -1);
|
grant("i_group_member_remove_power", -1);
|
||||||
|
|
||||||
assertFalse(model.canToggleGroup(group(-1, 0), false), "a group needing unlimited power");
|
assertFalse(model.canToggleGroup(group(-1, 0), false), "a group needing unlimited power");
|
||||||
assertTrue(model.canToggleGroup(group(75, 1000), true), "unlimited remove power");
|
assertTrue(model.canToggleGroup(group(75, 1000), true), "unlimited remove power");
|
||||||
|
|||||||
Reference in New Issue
Block a user