我有一个wiki家族,我需要管理几千个用户。我们没有一种优雅的方法可以禁用已经离开程序的任何用户,过去我们已经能够更改他们的密码,但这不是一个持久的解决方案。我已经调查了几种禁用用户帐户的方法,但我不确定选择哪个选项。
CentralAuth扩展名 - 设置维基家族非常复杂,并且与维基百科核心开发密切相关。我将用户迁移到centralauth全局用户表中。此设置不考虑我们广泛使用的表前缀。与扩展相关联的特殊页面因此而全部被破坏。
IP阻止 - 我无法使用此功能,因为多个用户可以在同一个IP,工作站或计算机实验室访问该Wiki。
登录时的挂钩 - 当用户登录时可能使用挂钩(UserLoginComplete),然后根据数据库中设置的标志立即将其注销。
共享权限 - 我查看了几个允许全局权限的扩展程序,但其中许多扩展程序不稳定或处于测试阶段,例如:SharedUserRights。这里的想法是创建一个“非活动”权限,并使用该权限组全局管理帐户。
我愿意接受各种想法!希望这一切都有意义,提前谢谢!
答案 0 :(得分:1)
如果要完全锁定它们(禁用登录),请使用AbortLogin hook检查黑名单中的用户名。有关示例,请参阅Extension:Lockout。
如果您希望他们能够登录但不能编辑,您可以使用UserGetRights hook删除他们的编辑权限。
答案 1 :(得分:1)
谢谢大家的建议!我最终使用全局ipblocks表和Extension:Lockout来阻止用户登录,从而有效地禁用他们的帐户。我在LocalSettings.php文件中为全局用户设置了共享表和共享数据库:
$wgSharedDB = 'up_commonusers';
$wgSharedTables = array( 'user', 'user_groups', 'account_requests', 'account_credentials', 'ipblocks');
我计划根据此列表的用户名来管理被阻止的帐户:特殊:BlockList。这个列表的缺点是它没有用户的主wiki,所以我在ipblocks表中添加了一个'ipb_user_home'列,以便以后用这个钩子作为参考:
$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表而不是本地iptss表中,然后它将挂钩添加他们的home wiki数据。 Lockout扩展在登录时使用不同的挂钩,它将检测用户是否被阻止并抛出错误消息。弹出错误,您无法登录。
希望这有帮助!
答案 2 :(得分:0)
mediawiki standard user rights handling有什么问题?只提供对特定组的读/写访问权限以及remove a user from that group何时不再相关?