fix bug: RNRS-exempted users wrongly added to $wgRNRSConfirmedGroup

这个提交包含在:
WaitSpring 2024-04-17 14:51:45 +08:00
父节点 40f16350a2
当前提交 1cdf1803cf
共有 1 个文件被更改,包括 64 次插入7 次删除

查看文件

@ -86,8 +86,8 @@ class PermissionsHook implements
{
// Mode2: has right to exempt from verification
$rnrsverified_mode2 = (
$this->permissionManager->userHasRight($user, 'rnrsverify-confirmed') ||
$this->permissionManager->userHasRight($user, 'rnrsverify-exempt')
$this->permissionManager->userHasRight($user, $this->config->get('RNRSConfirmedGroup')) ||
$this->permissionManager->userHasRight($user, $this->config->get('RNRSExemptGroup'))
);
if ($rnrsverified_mode2) {
@ -137,24 +137,54 @@ class PermissionsHook implements
$this->userGroupManager->listAllGroups()
)
);
$rnrsverified_enabled_exempt_group = in_array(
$this->config->get('RNRSExemptGroup'),
array_merge(
$this->userGroupManager->listAllImplicitGroups(),
$this->userGroupManager->listAllGroups()
)
);
if (
!$this->config->has('RNRSExclusiveRights') ||
!$this->config->has('RNRSSalt')
) {
return true;
} else if ($rnrsverified_mode1 || $rnrsverified_mode2 || $rnrsverified_mode3) {
} else if (($rnrsverified_mode1 || $rnrsverified_mode2) && $rnrsverified_mode3) {
// case 1: verified and exempted (bugfix)
if (
$rnrsverified_enabled_confirmed_group && $rnrsverified_enabled_exempt_group &&
!in_array($this->config->get('RNRSConfirmedGroup'), $this->permissionManager->getUserPermissions($user))
) {
$this->userGroupManager->removeUserFromGroup($user, $this->config->get('RNRSExemptGroup'));
$this->userGroupManager->addUserToGroup($user, $this->config->get('RNRSConfirmedGroup'));
}
return true;
} else if (($rnrsverified_mode1 || $rnrsverified_mode2) && !$rnrsverified_mode3) {
// case 2: verified but not exempted
if (
$rnrsverified_enabled_confirmed_group &&
!in_array($this->config->get('RNRSConfirmedGroup'), $this->permissionManager->getUserPermissions($user))
) {
$this->userGroupManager->addUserToGroup($user, 'rnrsverify-confirmed');
$this->userGroupManager->addUserToGroup($user, $this->config->get('RNRSConfirmedGroup'));
}
return true;
} else if (
!$rnrsverified_mode1 && !$rnrsverified_mode2 && !$rnrsverified_mode3 &&
!($rnrsverified_mode1 || $rnrsverified_mode2) && $rnrsverified_mode3
) {
// case 3: exempted but not verified
if (
$rnrsverified_enabled_confirmed_group &&
in_array($this->config->get('RNRSConfirmedGroup'), $this->permissionManager->getUserPermissions($user))
) {
$this->userGroupManager->removeUserFromGroup($user, $this->config->get('RNRSConfirmedGroup'));
}
return true;
} else if (
!($rnrsverified_mode1 || $rnrsverified_mode2) && !$rnrsverified_mode3 &&
in_array($action, $this->config->get('RNRSExclusiveRights'))
) {
// case 4: not exempted and not verified
$result = 'rnrshook-action-restricted';
return false;
};
@ -179,13 +209,40 @@ class PermissionsHook implements
$this->userGroupManager->listAllGroups()
)
);
$rnrsverified_enabled_exempt_group = in_array(
$this->config->get('RNRSExemptGroup'),
array_merge(
$this->userGroupManager->listAllImplicitGroups(),
$this->userGroupManager->listAllGroups()
)
);
if ($rnrsverified_mode1 || $rnrsverified_mode2 || $rnrsverified_mode3) {
if (($rnrsverified_mode1 || $rnrsverified_mode2) && $rnrsverified_mode3) {
// case 1: verified and exempted (bugfix)
if (
$rnrsverified_enabled_confirmed_group && $rnrsverified_enabled_exempt_group &&
!in_array($this->config->get('RNRSConfirmedGroup'), $this->permissionManager->getUserPermissions($user))
) {
$this->userGroupManager->removeUserFromGroup($user, $this->config->get('RNRSExemptGroup'));
$this->userGroupManager->addUserToGroup($user, $this->config->get('RNRSConfirmedGroup'));
}
} else if (($rnrsverified_mode1 || $rnrsverified_mode2) && !$rnrsverified_mode3) {
// case 2: verified but not exempted
if (
$rnrsverified_enabled_confirmed_group &&
!in_array($this->config->get('RNRSConfirmedGroup'), $this->permissionManager->getUserPermissions($user))
) {
$this->userGroupManager->addUserToGroup($user, 'rnrsverify-confirmed');
$this->userGroupManager->addUserToGroup($user, $this->config->get('RNRSConfirmedGroup'));
}
} else if (
!($rnrsverified_mode1 || $rnrsverified_mode2) && $rnrsverified_mode3
) {
// case 3: exempted but not verified
if (
$rnrsverified_enabled_confirmed_group &&
in_array($this->config->get('RNRSConfirmedGroup'), $this->permissionManager->getUserPermissions($user))
) {
$this->userGroupManager->removeUserFromGroup($user, $this->config->get('RNRSConfirmedGroup'));
}
}