1

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

  1. CentralAuth扩展 - 为 wiki 家族设置这非常复杂,并且与 wikipedia 核心开发密切相关。我将我的用户迁移到 centralauth 全局用户表中。此设置不考虑我们广泛使用的表前缀。与扩展相关的特殊页面都因此而损坏。

  2. IP Blocking - 我不能使用这个,因为多个用户可能在工作站或计算机实验室从同一个 IP 访问 wiki。

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

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

我对想法持开放态度!希望这一切都有意义,在此先感谢!

4

3 回答 3

1

如果您想完全锁定它们(禁用登录),请使用AbortLogin 挂钩检查黑名单中的用户名。有关示例,请参见扩展:锁定。

如果您希望他们能够登录但不能编辑,您可以使用UserGetRights 挂钩来剥夺他们的编辑权限。

于 2012-11-13T12:24:55.677 回答
1

谢谢大家的建议!我最终使用了全局 ipblocks 表和Extension:Lockout来阻止用户登录,从而有效地禁用了他们的帐户。我在 LocalSettings.php 文件中为全局用户设置了共享表和共享数据库:

 $wgSharedDB = 'up_commonusers';
 $wgSharedTables = array(  'user', 'user_groups', 'account_requests', 'account_credentials', 'ipblocks');

我计划使用以下列表根据用户名管理被阻止的帐户:Special: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 页面来阻止用户。被阻止的用户被添加到全局 ipblocks 表而不是本地表,因为我们配置了一个 SharedTable,然后它使用钩子添加他们的主页 wiki 数据。Lockout 扩展在登录时使用了不同的钩子,它将检测用户是否被阻止并抛出错误消息。弹出错误,您无法登录。

希望这可以帮助!

于 2012-11-21T21:01:51.387 回答
0

mediawiki标准用户权限处理有什么问题?只需授予特定组的读/写访问权限,并在不再相关时从该组中删除用户?

于 2012-11-12T21:27:33.863 回答