在MediaWiki中禁用用户帐户

时间:2012-11-12 18:13:17

标签: php mediawiki user-accounts

我有一个wiki家族,我需要管理几千个用户。我们没有一种优雅的方法可以禁用已经离开程序的任何用户,过去我们已经能够更改他们的密码,但这不是一个持久的解决方案。我已经调查了几种禁用用户帐户的方法,但我不确定选择哪个选项。

  1. CentralAuth扩展名 - 设置维基家族非常复杂,并且与维基百科核心开发密切相关。我将用户迁移到centralauth全局用户表中。此设置不考虑我们广泛使用的表前缀。与扩展相关联的特殊页面因此而全部被破坏。

  2. IP阻止 - 我无法使用此功能,因为多个用户可以在同一个IP,工作站或计算机实验室访问该Wiki。

  3. 登录时的挂钩 - 当用户登录时可能使用挂钩(UserLoginComplete),然后根据数据库中设置的标志立即将其注销。

  4. 共享权限 - 我查看了几个允许全局权限的扩展程序,但其中许多扩展程序不稳定或处于测试阶段,例如:SharedUserRights。这里的想法是创建一个“非活动”权限,并使用该权限组全局管理帐户。

  5. 我愿意接受各种想法!希望这一切都有意义,提前谢谢!

3 个答案:

答案 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何时不再相关?