Signed-off-by: WaitSpring <me@waitspring.com>
这个提交包含在:
WaitSpring 2024-02-27 09:21:58 +08:00
父节点 d65a1d047f
当前提交 cf83ff876d
找不到此签名对应的密钥
共有 2 个文件被更改,包括 55 次插入4 次删除

查看文件

@ -16,7 +16,8 @@
},
"Hooks": {
"GetPreferences": "PreferencesHook",
"getUserPermissionsErrors": "PermissionsHook"
"getUserPermissionsErrors": "PermissionsHook",
"UserEffectiveGroups": "PermissionsHook"
},
"HookHandlers": {
"PreferencesHook": {
@ -39,6 +40,12 @@
},
"RNRSExclusiveRights": {
"value": []
},
"RNRSExemptGroup": {
"value": "rnrsverify-exempt"
},
"RNRSConfirmedGroup": {
"value": "rnrsverify-confirmed"
}
},
"MessagesDirs": {

查看文件

@ -8,13 +8,15 @@ use MediaWiki\User\UserOptionsLookup;
use MediaWiki\User\UserIdentity;
use MediaWiki\User\Registration\UserRegistrationLookup;
use MediaWiki\User\UserGroupManager;
use MediaWiki\User\Hook\UserEffectiveGroupsHook;
use RequestContext;
use Config;
use Title;
use User;
class PermissionsHook implements
getUserPermissionsErrorsHook
getUserPermissionsErrorsHook,
UserEffectiveGroupsHook
{
/** @var permissionManager */
private $permissionManager;
@ -89,10 +91,12 @@ class PermissionsHook implements
*/
private function checkUserGroupAndRights(UserIdentity $user)
{
global $wgRNRSExemptGroup;
// Mode3: exempted from verification
$rnrsverified_mode3 = (
$this->permissionManager->userHasRight($user, 'rnrsverify-exempt') ||
in_array('rnrsverify-exempt', $this->permissionManager->getUserPermissions($user)) ||
in_array($wgRNRSExemptGroup, $this->permissionManager->getUserPermissions($user)) ||
in_array('bot', $this->permissionManager->getUserPermissions($user))
);
@ -113,8 +117,17 @@ class PermissionsHook implements
*/
public function onGetUserPermissionsErrors($title, $user, $action, &$result)
{
global $wgRNRSConfirmedGroup;
$rnrsverified_mode1_2 = $this->checkUserVerifyHash($user);
$rnrsverified_mode3 = $this->checkUserGroupAndRights($user);
$rnrsverified_has_confirmed_group = in_array(
$wgRNRSConfirmedGroup,
array_merge(
$this->userGroupManager->listAllImplicitGroups(),
$this->userGroupManager->listAllGroups()
)
);
if (!$this->config->has('RNRSExclusiveRights')) {
return true;
@ -126,7 +139,12 @@ class PermissionsHook implements
if ($rnrsverified_mode3) {
return true;
} else if ($rnrsverified_mode1_2) {
$this->userGroupManager->addUserToGroup($user, 'rnrsverify-confirmed');
if (
$rnrsverified_has_confirmed_group &&
!in_array($wgRNRSConfirmedGroup, $this->permissionManager->getUserPermissions($user))
) {
$this->userGroupManager->addUserToGroup($user, 'rnrsverify-confirmed');
}
return true;
} else if (
!$rnrsverified_mode1_2 && !$rnrsverified_mode3 &&
@ -137,4 +155,30 @@ class PermissionsHook implements
};
}
}
public function onUserEffectiveGroups(&$user, &$groups)
{
global $wgRNRSConfirmedGroup;
$rnrsverified_mode1_2 = $this->checkUserVerifyHash($user);
$rnrsverified_has_confirmed_group = in_array(
$wgRNRSConfirmedGroup,
array_merge(
$this->userGroupManager->listAllImplicitGroups(),
$this->userGroupManager->listAllGroups()
)
);
if ($rnrsverified_mode1_2) {
if (
$rnrsverified_has_confirmed_group &&
!in_array($wgRNRSConfirmedGroup, $this->permissionManager->getUserPermissions($user))
) {
$this->userGroupManager->addUserToGroup($user, 'rnrsverify-confirmed');
}
$groups = array_merge($groups, [$wgRNRSConfirmedGroup]);
}
}
}