浏览 2683 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-27
最后修改:2011-01-29
作者: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等等... 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-02-20
其中的 eval 是不是换成匿名函数或者闭包来实现更好些呢?
|
|
返回顶楼 | |