`
axgle
  • 浏览: 94180 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

php AuthRelationship v0.0.1发布:世界上最简洁给力的rbac实现

PHP 
阅读更多
<<采用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等等...
分享到:
评论
1 楼 tonyseek 2011-02-20  
其中的 eval 是不是换成匿名函数或者闭包来实现更好些呢?

相关推荐

    基于PHP的polarphp v0.0.1 alpha 全新PHP运行时环境.zip

    综上所述,polarphp v0.0.1 alpha作为一款全新的PHP运行时环境,其设计理念和实现技术都展示出对高性能、可扩展和现代化开发的追求。尽管目前仍处于早期阶段,但其潜力不容忽视,对于希望探索更高效PHP开发方式的...

    phpwiki轻论坛 v0.0.1.zip

    《phpwiki轻论坛 v0.0.1》是一款基于PHP编程语言开发的开源轻量级论坛系统,旨在为用户提供简洁、高效的在线交流平台。这款软件工具适用于初学者进行源码学习,同时也适合作为毕业设计或计算机案例研究的参考。 在...

    pytesser_v0.0.1.zip

    "pytesser_v0.0.1.zip" 是一个压缩包文件,其名称暗示它包含的是 pytesser 的 v0.0.1 版本。pytesser 是一个Python库,主要用于将图像中的文本识别为可编辑的文本,它是对Tesseract OCR(光学字符识别)引擎的接口。...

    python2.7,pIL1.17,pytesser_v0.0.1

    标题中的"python2.7,pIL1.17,pytesser_v0.0.1"涉及了三个关键的Python库或版本,分别是Python 2.7解释器、PIL(Python Imaging Library)1.17版本以及pytesser v0.0.1。在描述中提到这些内容已被验证可用,这表明这...

    python 验证码识别模块 pytesser_v0.0.1

    **Python验证码识别模块Pytesser_v0.0.1** Pytesser是Python的一个OCR(Optical Character Recognition,光学字符识别)库,主要用于识别图像中的文本,特别适用于处理验证码识别。这个版本是v0.0.1,适用于Python ...

    polarphp v0.0.1.zip

    在"polarphp v0.0.1.zip"这个压缩包中,我们看到的是PolarPHP项目的初始版本,这标志着项目在开发过程中的一个早期里程碑。 首先,让我们深入了解PolarPHP的核心特点: 1. **高性能**:PolarPHP采用了现代的V8JS...

    my datasnap v0.0.1

    《my datasnap v0.0.1:Delphi datasnap技术与MIDAS及scktsrvr替代方案解析》 在IT行业中,Delphi datasnap是一项强大的远程数据访问技术,它允许开发者创建分布式应用程序,使得客户端能够高效地访问和操作服务器...

    PHP实例开发源码-polarphp v0.0.1 alpha 全新PHP运行时环境.zip

    PHP实例开发源码—polarphp v0.0.1 alpha 全新PHP运行时环境.zip PHP实例开发源码—polarphp v0.0.1 alpha 全新PHP运行时环境.zip PHP实例开发源码—polarphp v0.0.1 alpha 全新PHP运行时环境.zip

    基于PHP的polarphpv0.0.1alpha全新PHP运行时环境源码.zip

    《PHP的PolarPHP v0.0.1alpha:构建全新的运行时环境源码解析》 在编程领域,PHP作为一种广泛使用的服务器端脚本语言,因其简洁易学、功能丰富的特性,深受开发者喜爱。然而,随着时间的发展和技术的进步,PHP也在...

    Bmob管理后台v0.0.1

    《Bmob管理后台v0.0.1:深入了解移动应用后台管理》 在现代移动应用开发中,后台管理系统起着至关重要的作用。Bmob作为一款强大的后端云服务,为开发者提供了便捷、高效的后台解决方案。本文将深入探讨“Bmob管理...

    pytesser_v0.0.1

    《Pytesser_v0.0.1:Python图像识别与验证码处理库》 在Python的世界里,处理图像和识别文本,尤其是验证码,是一项常见的任务。Pytesser_v0.0.1是一个专为此目的设计的模块,它为开发者提供了一个方便的工具集,...

    white_draw_v0.0.1.rar_drawcli_white

    《white_draw_v0.0.1.rar_drawcli_white》是一个基于MS DRAWCLI的增强版本,致力于提供更加丰富和便捷的绘图体验。该软件在原版的基础上进行了创新性改进,以满足用户对于图像编辑和创作的需求。以下是关于这个项目...

    h5小游戏管理平台 v0.0.1.zip

    【描述】"h5小游戏管理平台 v0.0.1.zip" 指出这是一款处于初期开发阶段(v0.0.1)的软件,可能还存在一些未完善的特性或者bug。开发者通常会在后续的版本迭代中逐步完善功能和优化性能。 【标签】: 1. **源码源...

    论坛地图插件(GMap) for Discuz v0.0.1.rar

    【标题】"论坛地图插件(GMap) for Discuz v0.0.1.rar"是一个专为Discuz!论坛设计的扩展插件,其主要功能是将论坛中的地理位置信息与Google Maps(GMap)相结合,为用户提供更加直观、生动的信息展示方式。这款插件...

    Node.JS匿名在线聊天室 v0.0.1

    【Node.JS匿名在线聊天室 v0.0.1】是一个基于Node.js和JavaScript技术构建的实时在线聊天应用。这个项目展示了如何利用Node.js的非阻塞I/O和事件驱动特性来实现一个高效的、实时的通信环境,以及如何通过JavaScript...

    GPSBDClient-v0.0.1.apk

    GPSBDClient-v0.0.1.apk

    安卓应用-电子图书-哲思读书最新版 v0.0.1.zip

    “安卓应用-电子图书-哲思读书最新版 v0.0.1”是一个专为Android平台设计的电子图书阅读应用,旨在为用户提供丰富的哲学类书籍资源,帮助用户在闲暇之余深入思考人生与世界。该应用的版本号为v0.0.1,这通常表示它...

    电子-任务2v0.0.1.zip

    "电子-任务2v0.0.1.zip" 提供了一个关于51单片机的项目或教程,通过解压我们可以得到“任务2 v0.0.1”这个子文件,它可能包含了源代码、设计文档、电路原理图等相关资料。 51单片机是Intel公司8051系列的一种微控制...

    siextplugin_v0.0.1

    "siextplugin_v0.0.1" 是一个专为Source Insight设计的插件,它扩展了这款强大的源代码编辑器的功能。Source Insight是一款广泛使用的编程语言分析和浏览工具,尤其受到程序员的喜爱,因为它提供了对代码的即时智能...

Global site tag (gtag.js) - Google Analytics