你能用哪些命令、能进哪些世界、菜单里能看到几项,都由权限系统算出来。
大部分人一辈子不用碰它——进服就在某个组里,该有的都有了。这一页是给两种人看的:想知道自己缺什么权限的人,和管权限的人。
我现在有什么
菜单里的「权限」,或者:
/rsp user <你的名字> info
/rsp 是 /rswperm 的别名。会列出你所在的组、以及从组里继承下来的规则。
想问某一件具体的事:
/rsp user <玩家> check rcc.fly
组是继承制的
一个组可以有多个父组,权限从父组流下来。所以「给新人加一项能力」的做法是改 visitor 组,而不是挨个给人加。
阶梯是这套继承关系的一种受管形态:一串有先后的组,第 i 级的父组里恰好有第 i-1 级。比如:
visitor → member → admin
在阶梯上,判定是向上放行的:一件事只要 member 能做,admin 自动能做,不需要为 admin 再配一遍。
DAG 已经能表达继承了,为什么还要阶梯
因为阶梯多买到一样东西:顺序。有了顺序才有这四件事——
在两级之间插一级是原子的(不用手改两条父子关系);删掉中间一级会自动接回去;能比较「谁比谁高」;升级降级就是沿阶梯走一格。
纯继承图里这些全要手工维护,而手工维护的顺序迟早会和实际继承关系对不上。
判定是怎么算出来的
一个人对一个节点的最终结果,是把所有相关的规则排个序,取第一名。排序规则是固定的七档:
| 顺位 | 比什么 | 谁赢 |
|---|---|---|
| 1 | 键的具体度 | 更具体的赢 |
| 2 | 上下文具体度 | 更具体的赢 |
| 3 | 继承距离 | 更近的赢 |
| 4 | 权重 | 更大的赢 |
| 5 | 值 | 拒绝赢 |
| 6 | 键名 | 字典序 |
| 7 | 出处 | 字典序 |
第 1 档必须排在第 3 档前面。否则「先给一整包权限,再挖掉其中一项」这种写法会失效——挖洞那条比整包更具体,但可能来自更远的父组。
第 6、7 档看着像凑数,其实是必需的:少了它们,两条完全同级的规则谁赢就取决于插件的加载顺序,同一份配置在两次重启之间会给出不同结果。
为什么我这条权限没生效
/rsp why <玩家> <节点>
这条命令把全部候选规则按上面的顺序列出来,告诉你最后是哪一条赢了。
末尾还会列出这次判定用到的每个上下文提供方,标注 [通] / [失败] / [已隔离]。
这一段不是调试信息,是必需的
带条件的规则(比如「只在地皮世界里生效」)需要有人告诉权限系统「他现在在哪个世界」。提供这个信息的是别的插件。
如果那个插件没起来,条件判断不出来,这条规则就不出现在候选表里——和「你压根没配这条规则」长得一模一样。两种情况下你看到的都只是「少了一行」。
所以
why必须把提供方的状态一起说出来,否则你会去改一条本来就没问题的配置。
事件门禁
除了命令权限,还能拦原版行为——破坏方块、开容器、攻击实体这些。
/rsp guard list
/rsp guard on <id>
/rsp guard off <id>
改完立刻生效,不用重启。
guard list 分三档显示,这个区分很重要:
[开] 配置开着 + 事件订上了 —— 真的在拦人
[开·订阅失败] 配置开着,但事件订不上 —— 拦不住任何人
[关] 配置关着
一条「配置开着但事件 id 在这个 BDS 版本上不存在」的门禁,在别处看起来和一条正在拦人的门禁完全一样。两者中间隔着一整个安全假设。
管理员命令
user <玩家> info | check <节点> | setgroup | addgroup <组> | delgroup <组>
user <玩家> set <节点> <true|false> | unset <节点> | promote | demote [阶梯]
group list | info <组> | create | delete | set | unset | parent add|del
track list | show <阶梯> | insert <阶梯> <组> [插在谁上面] | remove
why <玩家> <节点>
nodes | guard list|on|off <id> | providers | status | reload
promote / demote 沿阶梯走一格,比 delgroup 加 addgroup 安全——它不会在两条命令之间留下一个「什么组都不在」的瞬间。
网页管理界面
权限插件带一个网页界面,默认关着。要开的话得同时满足两件事:配置里 enabled 设成 true,并且填一个非空的 token。
token 是空的就不会启动,日志里会写明原因。一个不需要认证、又能改全服权限的界面,比没有界面糟得多。
默认只监听 127.0.0.1。绑到别的地址上会在日志里留一条警告——那不代表不让你这么做,只是提醒你确认它在防火墙后面。
常见问题
我被降组了?
先 /rsp user <你> info 看当前组。组没变但权限变了,多半是组本身的配置改了,/rsp why 能看到是哪条规则赢的。
为什么我在某个世界能飞,换个世界就不能?
两种可能:一是权限带了世界条件,二是那个世界本身不允许飞行(见多世界那页)。/rsp why <你> rcc.fly 能区分——如果候选表里根本没有相关规则,那就是世界的事,不是权限的事。
权限组名字能改吗?
能,但改名不会自动改掉引用它的地方(阶梯、准入条件都按名字记)。改之前先 /rsp providers 和 /rsp track list 看一眼谁在引用。
没装权限插件的服务器还能跑吗?
能。别的插件连不上权限系统时会走「离线」路径,不是报错——一个可选依赖没装是正常情况,不该让整台服务器起不来。
权限系统知道地皮和世界的事吗?
它的代码里一个和世界、地皮相关的名字都没有。 上下文由别的插件主动登记进来。所以没装世界插件的服务器上,每次判定连一次多余的跨插件调用都不会发生。