<<采用mixin原理实现的rbac解决方案>>之php版:AuthRelationship v0.0.1
作者:axgle
功能特征(write less,do more):
1.支持一个用户扮演多个角色
2.角色可以继承,可以包含其他角色
3.支持task,task就像角色一样
4.支持business rule(业务规则)
5.支持统一的operation名称检查(例如master的edit和author的edit,edit名称相同,但业务规则不同,author只能编辑自己的,但权限检查的时候依然用"edit"这个名称).
实现原理:
用户与AuthItem之间的关系约定:
1.AuthItem的定义: 角色,task,operation,统称AuthItem
2.mixin原则: 任何AuthItem可以有多个Child与之关联(把Child AuthItem mixin到某个AuthItem)
3.单项分配原则: 一个用户只能有一个"直接"的AuthItem与之关联
根据以上约定,则自然一个用户可以有多个AuthItem与之"间接"关联(可以解决一个用户多个角色的问题).
使用举例:读者可以阅读,作者可以创建,阅读,编辑他自己的帖子;编辑可以有作者的所有权限,还可以编辑所有人的,可以publish,master有编辑的所有权限,而且可以删除,具备create权限的人,就同时具备了创建帖子和评论的权限.问:master可以创建评论么?
$config=array(
'reader'=>array('read'),
'author'=>array('create','read', 'edit'=>'return $author_id==$user_id;'),
'editor'=>array('author','edit','publish'),
'master'=>array('editor','delete'),
'create'=>array('createPost','createComment')
);
$ar=new AuthRelationship($config);
echo (int)$ar->checkAccess('master', 'createPost', array('author_id'=>1, 'user_id'=>2));
你可以尝试其他各种checkAccess,比如author能否编辑,以及editor能否编辑,改变业务规则,或者让user_id=1等等...
分享到:
相关推荐
pytesser_v0.0.1.zip pytesser_v0.0.1.zip pytesser_v0.0.1.zip pytesser_v0.0.1.zip pytesser_v0.0.1.zip
此文件包含python2.7,pIL1.17,pytesser_v0.0.1,经过本人验证可用
python 验证码识别模块 pytesser_v0.0.1,Python2.7+pytesser简单验证码的识别
PHP实例开发源码—polarphp v0.0.1 alpha 全新PHP运行时环境.zip PHP实例开发源码—polarphp v0.0.1 alpha 全新PHP运行时环境.zip PHP实例开发源码—polarphp v0.0.1 alpha 全新PHP运行时环境.zip
OCR模块使用示例代码
phpwiki轻论坛 v0.0.1.zip
基于PHP的polarphp v0.0.1 alpha 全新PHP运行时环境.zip
polarphp v0.0.1.zip
GPSBDClient-v0.0.1.apk
《常用小工具集合》v0.0.1 纯bat打造! 简洁实用。。。。
my datasnap v0.0.1.rar
Go语言网络编程-v0.0.1
游戏开发引擎 kbengine源代码读 v0.0.1
由于最近项目要与人人网做交互,所以基于 RESTClient class 编写了一款调用人人网RESTful API’s Client class,暂时为alpha版,以后还会继续扩展,有兴趣的朋友可以试用一下。
博客地址:https://blog.csdn.net/MINGHUE/article/details/102970907
scratch2源码超级马里奥V0.0.1本资源系百度网盘分享地址
h5小游戏管理平台 v0.0.1.zip
linux-0.0.1:Linux 0.0.1原始代码分析