禁用MediaWiki中的用户帐户
我有一个维基系列,有几千个用户需要管理。我们没有一种优雅的方式来禁用任何已经离开程序的用户,过去我们已经能够更改他们的密码,但这对于未来不是一个持久的解决方案。我已经调查了禁用用户帐户的几种不同方式,但我不确定要选择哪个选项。禁用MediaWiki中的用户帐户
的CentralAuth扩展 - 这是一个相当复杂的设置为一个wiki家庭和非常密切相关的维基百科的核心发展。我尽可能将我的用户迁移到centralauth全局用户表中。此设置不考虑我们广泛使用的表前缀。与扩展名相关的特殊页面全部因此而中断。
IP阻塞 - 我不能使用它,因为多个用户可以在工作站或计算机实验室从同一IP访问wiki。
登录挂钩 - 当用户登录时可能使用挂钩(UserLoginComplete),然后根据数据库中设置的标志立即注销它们。
共享权限 - 我看了一些允许全局权限的扩展,但其中很多扩展并不稳定或处于测试阶段,例如:SharedUserRights。这里的想法是创建一个“非活动”权限并使用该权限组全局管理帐户。
我愿意接受创意!希望这一切都有道理,先谢谢!
谢谢大家的建议!我结束了使用全局ipblocks表和Extension:Lockout阻止用户登录,有效地禁用他们的帐户。我设置的共享表和共享为全球用户数据库在我的LocalSettings.php文件:
$wgSharedDB = 'up_commonusers';
$wgSharedTables = array( 'user', 'user_groups', 'account_requests', 'account_credentials', 'ipblocks');
我计划管理的基础上与此列表用户名封锁的帐户:特殊:黑名单。这个列表的缺点是,它不具有用户家中的wiki,所以我加了一个“ipb_user_home”列到ipblocks表作为参考后用这个钩子使用:
$wgHooks['BlockIpComplete'][] = 'addHomeWikiData';
function addHomeWikiData(&$block, &$user){
$userId = $block->getTarget() instanceof User ? $block->getTarget()->getID() : 0;
if($userId>0){
$dbw = wfGetDB(DB_MASTER);
$row = $dbw->selectRow('user', '*', array('user_id'=>$userId));
$dbw->begin();
$dbw->update('ipblocks', array('ipb_user_home'=>$row->user_home), array('ipb_user'=>$userId));
$dbw->commit();
return true;
}
return false;
}
我最终会写我自己的在未来将阻止列表表使用这个信息,但现在我有我需要的东西。
所以工作流程非常简单。我使用正常的Special:Block页面来阻止用户。由于我们配置了SharedTable,被阻止的用户被添加到全局ipblocks表中,而不是本地IP地址表中,然后他们使用挂钩添加他们的主页wiki数据。锁定扩展在登录时使用不同的挂钩,以检测用户是否被阻止并引发错误消息。 “错误”弹出,您无法登录。
希望这会有所帮助!
mediawiki standard user rights handling怎么了?只要给特定组提供读/写访问权限,并且当它不再相关时,它就是remove a user from that group?
这些工作很好,但没有简单的方法来全局管理用户权限。 wiki系列中的每个wiki都有一个user_groups表,所以我将不得不更改每个wiki上每个用户的权限。我们有一个共享用户表,但不知道如何强制每个wiki使用全局user_groups表。 – honjunter13
MediaWiki手册:“如果一个成员拥有多个组,他们将获得他们所在的每个组的所有权限。包括匿名用户在内的所有用户都在'*'组中;所有注册用户都在'user '组。除了默认组,您可以使用相同的数组任意创建新组。“ I.E.创建“已禁用”组并从中删除权限不会禁用用户,因为用户自动成为授予已删除权限的用户组的一部分。 “标准用户权利处理”似乎不够充分,因为没有用户界面可以从“用户”中删除。 – kbulgrien
如果您想完全锁定它们(禁用登录),请使用AbortLogin hook来检查黑名单中的用户名。一个例子见Extension:Lockout。
如果你希望他们能够登录但不能编辑,你可以使用UserGetRights hook去掉它们的编辑权限。
“禁用”是什么意思?是的,撤销他们的'edit'(和'view'?)权利是做到这一点的方法。不确定CentralAuth如何帮助 – Bergi
通过禁用我的意思是让用户拥有“匿名”权利,并将编辑权限带走。我们不想删除该帐户,因为用户可能会返回。我试图让CentralAuth工作,因为它在使用全局用户管理器页面进行编辑时具有“隐藏帐户”和“锁定帐户以进行编辑”选项。感谢您的反馈! – honjunter13