父节点
d65a1d047f
当前提交
cf83ff876d
|
@ -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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
正在加载...
在新工单中引用