[视频] 扩展RBAC, 粗略实现 ACL
[color=Red]带web界面的RBAC扩展已经出炉了,修正了本帖这个版本的很多Bug,本帖代码及视频可以做为入门知识参考。更多请见FleaStart: [/color]
[url]http://www.fleaphp.org/bbs/viewthread.php?tid=3971[/url]
基于廖总的<RBAC扩展使用说明>和dos2000的websetup, 我更新了一下ACL部分, 不同于websetup的是, 我现在[color=Red]不deny角色[/color](让其可以被重拾), 而是[color=Red]deny掉某个特定的权限[/color], 这样可以更灵活地分配角色和权限. 因为RBAC过去的方式是无法让用户或子用户组重拾父用户组deny掉的角色的.
我制作了例子和视频, 因时间关系, 没有对基本的知识作过多解释, 大家可以直接看压缩包内的代码.
关于用户,用户组,角色和权限, 我补充说明一下:
1 一个用户只属于一个用户组
2 一个角色包含多个权限,
3 一个用户自身(非继承)可以有多个角色,也可以有多个权限
4 一个用户组可以有多个角色,也可以有多个权限
5 一个权限也可以属于多个角色。
6 一个用户的角色和权限来自两部分,一部分继承于所有父用户组的角色和权限,另一部分来自特别为其分配的角色和权限
7 一个用户组可以排除(exclude)一个角色, 而一旦在其子用户组或者在某个用户身上加入(include)这个角色, 那这个用户或者用户组将重拾这个角色
8 一个用户或用户组可以拒绝(disallow)一个权限, 一旦拒绝以后, 不管在什么地方再允许(allow)这个权限都于事无补
9 管理员可以做任何事情, 不受任何约束
对应的例子:
1 比如张三(用户)唯一属于A办公室(子用户组),A办公室位于一楼(父用户组)
2 产品经理(角色) 可以 设定产品开发计划(权限), 跟踪产品生产(权限), 调配工作人员(权限), 控制装配质量(权限), 当然还可以开办公室的门(权限), 喝开水(权限)
销售经理(角色) 可以 设定销售计划(权限), 跟踪产品售后服务(权限), 调配销售人员(权限), 当然也可以开办公室的门(权限), 喝开水(权限), 抽烟(权限)
办公人员(角色) 可以使用打印机(权限), 使用电话(权限), 喝开水(权限)
3 张三在家是老爸(角色), 在公司是产品经理(角色), 在家可以看电视(权限, 不属于老爸角色的权限),在公司还可以抽烟(权限, 不属于产品经理角色的权限)
4 一楼(父用户组)被赋予办公人员的角色, 加上一个特别权限, 可以喝茶(权限)
5 喝开水的权限即可以属于产品经理,也可以属于销售经理(角色)和办公人员(角色)
6 张三的角色和权限来自两部分,
一部分继承自由所有父用户组的角色和权限,也就是一楼(父用户组)的办公人员的角色, 和喝茶(权限)
另一部分来自特别为其分配的角色和权限, 比如说 在家可以看电视(权限, 不属于老爸角色的权限),在公司还可以抽烟(权限, 不属于产品经理角色的权限)
7 一楼(父用户组)被赋予办公人员的角色,但A办公室(子用户组)排除了(exclude)办公人员的角色, 这样在A办公室(子用户组)的张三就没有办公人员的角色了,现在单独给张三加入(include)办公人员的角色, 那张三将重拾这个角色
8 老总规定一楼(父用户组)不允许喝咖啡(disallow权限), 这样就算是张三或者A办公室原来有喝咖啡的权限的, 此时也不能喝了.
9 老总把办公室移到一楼去了, 天天喝咖啡(一楼disallow的权限), 还是当老大, 没人敢说他
在附件压缩包内acl.txt中有详细说明.谢谢廖总提供空间!
视频一: [url]http://share.fleaphp.org/downloads/acl1.7z[/url]
视频二: [url]http://share.fleaphp.org/downloads/acl2.7z[/url]
[[i] 本帖最后由 zpvip 于 2008-8-11 15:44 编辑 [/i]] 先顶后看,下载 ing.... 我下载完了传到 fleaphp.org 上去 [url]http://share.fleaphp.org/downloads/acl1.7z[/url]
[url]http://share.fleaphp.org/downloads/acl2.7z[/url] 呵呵,讲解跟dos2000的后台结合,相得益彰!:pan_105: 顶,好好研究 :handshake :victory: 下不了了老板! 感谢。。。Flea发扬光大 真透彻 顶! 下不了了老板!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 有没有谁可以提供下载的啊,我在仓库里也没有看到啊 用户 登录成功以后。。写入setUser() 还可以dump(getUser())
换到另一个function getUser()为什么就会没数据了呢? 支持,下载中
页:
[1]