You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MediaWiki权限控制需求:组内成员仅可编辑本组创建的页面

实现MediaWiki组内页面编辑权限控制方案

核心思路

要实现「某组成员仅能编辑该组成员创建的页面,且无法编辑未加入组的成员创建的页面」,需要结合MediaWiki的组权限配置和自定义权限判断逻辑,通过钩子实现自动化的权限校验。

步骤1:创建并配置基础用户组

首先在LocalSettings.php中定义目标用户组,同时收回普通用户的全局编辑权限,为后续精细化控制做准备:

# 创建自定义用户组
$wgGroupPermissions['GroupA']['createaccount'] = false;
$wgGroupPermissions['GroupB']['createaccount'] = false;

# 收回普通用户的默认编辑权限,后续仅开放给指定组的关联页面
$wgGroupPermissions['user']['edit'] = false;

# 允许各组成员创建页面(按需调整)
$wgGroupPermissions['GroupA']['createpage'] = true;
$wgGroupPermissions['GroupB']['createpage'] = true;

步骤2:通过钩子实现自动权限校验

利用MediaWiki的getUserPermissionsErrors钩子,在用户尝试编辑页面时,自动校验当前用户与页面创建者是否属于同一组,不一致则拒绝编辑。将以下代码添加到LocalSettings.php中:

$wgHooks['getUserPermissionsErrors'][] = 'checkGroupPageEditPermission';

function checkGroupPageEditPermission( $title, $user, $action, &$errors ) {
    // 仅处理编辑动作
    if ( $action !== 'edit' ) {
        return true;
    }

    // 获取页面创建者信息
    $page = WikiPage::factory( $title );
    $creator = $page->getCreator();
    if ( !$creator ) {
        // 无明确创建者的页面(如系统页面),可根据需求调整权限逻辑
        return true;
    }

    // 对比当前用户与创建者的组交集
    $userGroups = $user->getGroups();
    $creatorGroups = $creator->getGroups();
    $sharedGroups = array_intersect( $userGroups, $creatorGroups );

    if ( empty( $sharedGroups ) ) {
        // 无共享组,拒绝编辑并提示
        $errors[] = array( 'permissiondenied', '您只能编辑与您同组成员创建的页面' );
        return false;
    }

    return true;
}

补充说明

  • 若需要让组管理员拥有组内所有页面的编辑权限,可在钩子函数中添加额外判断,比如校验用户是否属于组管理员组。
  • 系统命名空间(如MediaWiki:)下的页面,可单独在LocalSettings.php中配置权限,避免被上述规则限制。
  • 若Wiki用户量较大,建议将钩子逻辑封装为独立扩展,便于维护和升级。

内容的提问来源于stack exchange,提问作者sube singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 04:53:11