如何在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:从权限层面控制(同时禁止匿名访问对应操作)
如果需要同时做到「隐藏按钮」和「禁止匿名用户直接访问该操作」,按以下步骤配置即可:
- 在
LocalSettings.php或者你的扩展配置文件中定义权限规则:
// 匿名用户无该操作权限 $wgGroupPermissions['*']['cryptosign'] = false; // 普通登录用户拥有该操作权限 $wgGroupPermissions['user']['cryptosign'] = true;
- 在你的自定义Action类中,覆写
getRestriction()方法,返回你自定义的权限名cryptosign即可:
public function getRestriction() { return 'cryptosign'; }
配置完成后MediaWiki核心会自动校验用户权限,无权限的匿名用户不会看到对应操作按钮,直接通过URL访问action=cryptosign也会触发权限报错。
之前方案失效的原因
你之前将getRestriction()返回值设置为upload,只会让操作权限和上传权限绑定,无法和你自定义的权限规则对应;同时如果没有在注入按钮的逻辑中关联权限判断,核心不会自动帮你隐藏按钮。
内容的提问来源于stack exchange,提问作者pcr
相关产品推荐
相关产品推荐

