权限管理系统的设想
时间:2006-01-30 来源:qingmedia
我现有的论坛的权限如看贴、回帖、下载等功能是作为论坛的属性,做到表的字段中,如果要增添某个权限功能,则相应地增加字段,并可能要修改程序,很不利扩展。我希望把权限管理简单化、集中化、易扩展,因此想了这么一个方案,思路来源于生活,我把设想在这里贴出来,如有雷同纯属巧合。
原理启发
80年代以前,很多商品实行凭票供应,那个时代,有钱没票商店不卖。顾客去商店买一斤白糖,商店小黑板上写着“白糖/3号糖票”,售货员根据顾客的需求 “白糖”,查到需要的票据是“3号糖票”,于是要求顾客拿出“3号糖票”才出售白糖。逢年过节,上级指示,增加“香肠”供应,于是小黑板上又多了一条“香肠/5号副食品票”。
程序的验证就如以上的权限认证的过程,顾客(用户)购买(使用)某商品(功能),该商品的购买条件(使用权限)由上级指示(管理员录入)写在黑板上(保存在表的记录中),而不是附加在商品本身(功能自身不考虑使用权限),售货员负责核对顾客是否具有购买的权利(验证程序模块负责审核用户权限),由售货员(验证程序)根据黑板上(数据表中)的上级指示(管理员增添的记录中),检查顾客(用户)是否拥有相应的票据(某种电子票据如“通行证”),有则允许购买(允许使用该功能)。
售货员不必背诵所有商品限制规则(验证程序不必把所有规则固化在程序中),因为商品随时会增加(新增功能模块程序),而只要随时看小黑板即可(规则由表中查询)。
顾客的票据由上级分配(用户的某种“电子票据”由管理员分配)。如此看来,商品供应规则的登记(功能模块的登记录入)、票据的配给(“电子票据”用户分配)、销售时票据的查核(程序验证)构成了权限系统的3个部分的集中管理。
程序实现思路设想
程序按照这个思路,也分成3块:
1)模块/权限登记:
负责将所有功能包括新增功能的权限规则记录在功能权限对照登记表中。
2)用户/用户组通行证发放:
负责给用户/用户组发放对各个模块的使用权限。
3)通用验证程序:
通用验证程序可做成一个函数,每个功能模块在开头调用一次即可,大致如下所示:
if get_permission($MoID, $UserInfo) == “false”{
//跳转错误处理
exit some code here;
}$MoID是每个功能模块自身拥有的唯一代码,保存于 [功能权限对照登记表] 中。
$UserInfo是包含用户通行证数据的变量或数组,可以是用户登录后从 [用户组表] 中查询的记录值。
此函数的功能是:接收某功能模块的请求,然后根据功能模块的$MoID查找 [功能权限对照登记表] ,查到访问该模块的所需通行证,再核对用户$UserInfo中所持有的通行证,如没有则转到错误处理界面,有则允许访问。
设计开发新模块时,需要为本模块起一个ModID,安装模块则添加此ModID记录到[功能权限对照登记表]中增加记录,并设置该模块所需通行证字符串内容。
“通行证字串”可以使用固定长度不重复的随机号码如“K4XZ-A74B”,不过为了好记容易理解,下面的示范使用了与功能代号相关的代码,此字串一般由模块/权限登记程序统一分配,而与模块本身无关。
_______________________
原理启发
80年代以前,很多商品实行凭票供应,那个时代,有钱没票商店不卖。顾客去商店买一斤白糖,商店小黑板上写着“白糖/3号糖票”,售货员根据顾客的需求 “白糖”,查到需要的票据是“3号糖票”,于是要求顾客拿出“3号糖票”才出售白糖。逢年过节,上级指示,增加“香肠”供应,于是小黑板上又多了一条“香肠/5号副食品票”。
程序的验证就如以上的权限认证的过程,顾客(用户)购买(使用)某商品(功能),该商品的购买条件(使用权限)由上级指示(管理员录入)写在黑板上(保存在表的记录中),而不是附加在商品本身(功能自身不考虑使用权限),售货员负责核对顾客是否具有购买的权利(验证程序模块负责审核用户权限),由售货员(验证程序)根据黑板上(数据表中)的上级指示(管理员增添的记录中),检查顾客(用户)是否拥有相应的票据(某种电子票据如“通行证”),有则允许购买(允许使用该功能)。
售货员不必背诵所有商品限制规则(验证程序不必把所有规则固化在程序中),因为商品随时会增加(新增功能模块程序),而只要随时看小黑板即可(规则由表中查询)。
顾客的票据由上级分配(用户的某种“电子票据”由管理员分配)。如此看来,商品供应规则的登记(功能模块的登记录入)、票据的配给(“电子票据”用户分配)、销售时票据的查核(程序验证)构成了权限系统的3个部分的集中管理。
程序实现思路设想
程序按照这个思路,也分成3块:
1)模块/权限登记:
负责将所有功能包括新增功能的权限规则记录在功能权限对照登记表中。
2)用户/用户组通行证发放:
负责给用户/用户组发放对各个模块的使用权限。
3)通用验证程序:
通用验证程序可做成一个函数,每个功能模块在开头调用一次即可,大致如下所示:
if get_permission($MoID, $UserInfo) == “false”{
//跳转错误处理
exit some code here;
}$MoID是每个功能模块自身拥有的唯一代码,保存于 [功能权限对照登记表] 中。
$UserInfo是包含用户通行证数据的变量或数组,可以是用户登录后从 [用户组表] 中查询的记录值。
此函数的功能是:接收某功能模块的请求,然后根据功能模块的$MoID查找 [功能权限对照登记表] ,查到访问该模块的所需通行证,再核对用户$UserInfo中所持有的通行证,如没有则转到错误处理界面,有则允许访问。
设计开发新模块时,需要为本模块起一个ModID,安装模块则添加此ModID记录到[功能权限对照登记表]中增加记录,并设置该模块所需通行证字符串内容。
“通行证字串”可以使用固定长度不重复的随机号码如“K4XZ-A74B”,不过为了好记容易理解,下面的示范使用了与功能代号相关的代码,此字串一般由模块/权限登记程序统一分配,而与模块本身无关。
_______________________
相关阅读 更多 +