Overriding Command Access (SourceMod)/zh
Language: | English • русский • 中文 |
---|
这个文章介绍了如何在不改变插件源代码的情况下,去改变标志或者任何控制语句的权限。权限既可以是全局的,也可以是给特定的组员的。
介绍
重写权限是SourceMod管理系统中最为有力的特性之一。这能让你高效地:
- 在不更改插件源码的前提下更改管理命令的权限
- 不更改源码的情况下更改整个用户组的命令权限
- 创建自定义权限级别
- 无视命令的标志,允许或拒绝任何玩家或组的访问权限
当你更改了一个SourceMod成员的权限,你就完成了"重写"这一动作。重写是一条字符串。如果这个字符串与命令名匹配,那么这个命令的权限将会从这条重写中继承(而不是代码中)。
这个概念重要在于:
- 重写能改变一条命令的权限。
- 重写能被当作自定义的访问权限标志。
例如,一个插件需要等级“g”才能使用sm_map命令。然而,重写可以对特定的组直接同意或者拒绝这条命令的使用,也可以把默认需要的等级改为“k”。
更有意思的事,一个插件可以要求使用特殊的菜单选项必须有权限访问sm_map指令。在这种情况下,用户必须有sm_map的权限,而不是一个硬编码的标志。
最后一个例子,一个插件可能要求用户必须有权限访问plugin_crab_usage,然而这完全不是一个命令。这意味着插件要求的只是默认权限,用户爱怎么重写怎么重写。这也暗示着重写是和命令无关的。但是,命令本身会从同名的重写中继承权限要求。
更改重写文件不会立刻生效,你可以使用"sm_reloadadmins"指令来刷新。
重写方法
重写有两种方法:重写指令和重写组。重写命令基于命令会自动继承同名的重写提供的权限要求。重写组则导致一个用户组有这个命令的权限。
例如,如果一个重写为sm_map,任何sm_map的指令都会继承重写中的权限要求。 如果一个重写组为CSDM,任何标记权限组为"CSDM"的成员都会获得该权限。
全局设置
全局权限重写配置文件为configs/admin_overrides.cfg。格式如下:
Overrides { "[名字]" "[标志]" "@[用户组]" "[标志]" /* ... */ }
用户组会以“@”开头,例如:
Overrides { "sm_map" "k" //Change "sm_map" to the "k" flag. "@CSDM" "m" //Change all CSDM commands to the "m" flag. "sm_chat" "" //Allow anyone to use "sm_chat"空则代表不需要权限 }
注意,如果你给一堆权限要求,那么客户端就必须有所有需要的权限了,而不是任意一个。(例如"abc"需要你有三个权限,而不是任意一个)
组配置
Group overrides are given on an allow or deny basis. That is, rather than changing flags per-group, the override is simply whether it is allowed or denied to members of that group.
更多内容请参考增加用户组.