![]() |
![]() |
#1 |
高级会员
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 注册: 08年04月11日
来自: 盘丝洞
帖子: 311
声望力: 20
声望:
50
![]() 现金:29两梁山币
资产:1245两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
增加权限等级
发信人: cloner (!!!!!!!), 信区: Mud_Builder 标 题: Mud_Builer新手QA(三) 发信站: 一塌糊涂 BBS (Mon May 21 09:49:33 2001) Q:怎样在MUD中加一个新的权限等级?比如(boss) A: 首先讲讲Es2类MudLib中所谓的权限等级的构成。 从MudOs的层面上讲,在MudLib中的权限,体现在 对文件的读写权限,对efun的调用权限两个方面。 对于文件读写权限的控制,由MASTER_OB的valid_read() 和valid_write()检查。Es2类lib中将这个检查交给了 securityd.c中的同名函数进行,而在这个文件中, 他定义了一套不同于euid,uid的身份制度,也就是通常 说的巫师等级制度。 对于efun调用权限的控制,一部分是一些特殊的efun 比如bind,seteuid,shadow,socket等,他们在MASTER_OB 里有自己的检查函数;另一部分是利用simul_efun和 MASTER_OB里对override的检查来实现的。这个问题以后 有必要再讲。 加一个新的权限等级,就是要在Lib中加入一个有着和 其他等级不同的权限的人群,根据上面的分析,需要 改动的就包括上面相关的文件。 /adm/daemons/securityd.c 首先修改那个wiz_levels,加入你所需要的等级(boss), 理论上,事情已经完结,如果你promote test (boss), 以后你wizlist的时候是可以看到test的。不过这个等级 跟一般的玩家是没有权限上的区别的。要实现区别, 就要在上面提到的各个权限检查中加入对他的额外判断, 在securityd.c中,就包括trusted_write,exclude_write, trusted_read,exclude_read等mapping的修改,加入对于 (boss)这个等级的额外判断。同时在其他的地方,如果 需要可以加入对他它的判断。 /include/command.h 加入这个等级巫师能够使用的命令,我想你看了文件就该明白 怎么修改。 /feature/command.c enable_player(),在switch里加入: case "(boss)": set_path(???);//这个 ???是你在command.h里定义的宏 //enable_wizard; 加不加这个自己决定 break; 然后更新各个文件,看看效果如何。 pkuxkx.net 5555里我加过一个(online)的等级。 |
![]() |
![]() |