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

如何在Mediawiki操作下拉菜单中对匿名用户隐藏自定义操作按钮

正确实现方法

你可以根据自己的实现场景二选一:

方法1:钩子注入按钮时直接判断用户身份

如果你的「Crypto sign」按钮是通过SkinTemplateNavigation::Universal这类导航钩子注入到页面菜单的,直接在钩子回调中增加登录状态判断即可,匿名用户直接不生成按钮条目,示例代码如下:

$wgHooks['SkinTemplateNavigation::Universal'][] = function ( $skin, &$links ) {
    // 仅已注册的登录用户显示Crypto sign按钮
    if ( $skin->getUser()->isRegistered() ) {
        $links['actions']['cryptosign'] = [
            'text' => 'Crypto sign',
            'href' => $skin->getTitle()->getLocalURL( [ 'action' => 'cryptosign' ] ),
        ];
    }
    return true;
};

方法2:从权限层面控制(同时禁止匿名访问对应操作)

如果需要同时做到「隐藏按钮」和「禁止匿名用户直接访问该操作」,按以下步骤配置即可:

  1. 在LocalSettings.php或者你的扩展配置文件中定义权限规则:
// 匿名用户无该操作权限
$wgGroupPermissions['*']['cryptosign'] = false;
// 普通登录用户拥有该操作权限
$wgGroupPermissions['user']['cryptosign'] = true;
  1. 在你的自定义Action类中,覆写getRestriction()方法,返回你自定义的权限名cryptosign即可:
public function getRestriction() {
    return 'cryptosign';
}

配置完成后MediaWiki核心会自动校验用户权限,无权限的匿名用户不会看到对应操作按钮,直接通过URL访问action=cryptosign也会触发权限报错。


之前方案失效的原因

你之前将getRestriction()返回值设置为upload,只会让操作权限和上传权限绑定,无法和你自定义的权限规则对应;同时如果没有在注入按钮的逻辑中关联权限判断,核心不会自动帮你隐藏按钮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:09:00