Adding Groups (SourceMod)/zh

From AlliedModders Wiki
Revision as of 01:36, 12 September 2019 by MisakaSora (talk | contribs) (Created page with "{{Languages|Adding_Groups_(SourceMod)}} __FORCETOC__ 本文将介绍如何通过<tt>configs/admin_groups.cfg</tt>添加与配置组权限。<tt>admin-flatfile.smx</tt>会对...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Language: English  • 中文


本文将介绍如何通过configs/admin_groups.cfg添加与配置组权限。admin-flatfile.smx会对这个文件内容进行解析并加载。

介绍

当你想给多位管理员配置相似的属性和权限时,使用权限组是非常方便的。比如,假如说你希望有15个管理员都权限和权限豁免。在这种情况下,你只需要给这些管理员配置一个权限组,之后就可以在一个地方同时修改所有成员的权限了。


文件格式

权限组是位于“Group”代码块下的特定的代码块。每个组必须有个唯一名称,如果名称不是唯一的,权限会从现有组中扩展/覆盖。这就是说,如果一个组同时在配置文件中和外部源中(比如数据库)有配置,那么最终的权限会根据解析的顺序来合并/覆盖。你可以用KVManager来修改admin_groups.cfg文件。

权限组代码块长这样:

"Groups"
{
	"Group Name"
	{
		"[option1]"	"[value1]"
		"[option2]"	"[value2]"
		/* ... */
		"Overrides"
		{
			"[override1]"	"[allow|deny]"
			"[override2]"	"[allow|deny]"
			/* ... */
		}
	}
}

所有的选项都是可选的(也就说,他们不需要明确定义 ),类似,"Overrides"节点也是完全可选的,甚至可以省略,完整的可用选项包括:

  • flags: 这个组的成员继承Flag串。
  • immunity: 如果是数字,且比用户自身权限值高时,会被用户继承。如果是'@'开头的字符串,那么它表明,来自对应组的用户的指令无法作用于本组成员。

“Overrides”节点可以指定本组成员是否允许执行特定指令/组的指令。这是个非常强力的节点。例如,你可以设置让成员没有"map"的flag,但是允许他们执行sm_map,对应地你也可以让他们拥有"map"的flag但是不能执行sm_map

命令权限组在此文中会有更详细的介绍。

权限覆写的例子:

"Groups"
{
	"Basic Admin"
	{
		"flags"			"abc"	//保留位置、一般管理、踢人
		"immunity"		"1"	//低权限豁免值

		"Overrides"
		{
			"sm_map"	"allow"	//即便没有map的flag,也允许使用sm_map指令
			"@CSDM"		"deny"	//禁止执行来自CSDM组的指令
		}
	}
}

继承

权限组是不能被嵌套的,这就是说,一个组不能从另外一个组中继承权限。但是,一个管理员可以从任意多个权限组中继承权限。权限是可以叠加的,这也意味着,只有当更多权限被赋予时,才有体现。(译注:这话很绕,我估摸着大致意思是,不同组权限是完美合并的)

比如,如果一个用户有bcd的flag,一个组提供了ae的flag,另一个组提供了ae的flag,由于继承的存在用户会同时拥有abcde的flag。同样的,当组的权限豁免值大于用户当前的值时,会被用户继承。

唯一例外是组内的权限覆写。如果一个命令在A组是允许的,B组禁止的,那么当一个用户同时继承A组和B组,用户能否使用指令依赖于继承的顺序。如果A先继承,那么指令是允许执行的,如果B先继承,那么命令是被禁止的。

最后,需要注意的是,用户继承于一个权限组,此时对于组的权限的修改,不会立即生效,这是一种优化。如果你想立即生效,需要重新加载一下权限。(可以通过断开连接或指令sm_reloadadmins实现)


相关链接


友情翻译MisakaSora