QeePHP 开源社区 - 引领 PHP 开发新思想、新模式's Archiver

zpvip 发表于 2008-6-8 13:20

[视频] 扩展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]]

dualface 发表于 2008-6-8 13:42

先顶后看,下载 ing....

dualface 发表于 2008-6-8 13:43

我下载完了传到 fleaphp.org 上去

dualface 发表于 2008-6-8 13:57

[url]http://share.fleaphp.org/downloads/acl1.7z[/url]
[url]http://share.fleaphp.org/downloads/acl2.7z[/url]

guojunhl 发表于 2008-6-8 14:46

呵呵,讲解跟dos2000的后台结合,相得益彰!:pan_105:

hrtsea 发表于 2008-6-9 01:35

顶,好好研究

lxylxy888666 发表于 2008-6-9 10:45

:handshake

张文豪 发表于 2008-6-10 21:06

:victory:

askswin 发表于 2008-6-29 23:12

下不了了老板!

zsubob 发表于 2008-7-9 14:23

感谢。。。Flea发扬光大

yk5515 发表于 2008-8-4 10:08

真透彻 顶!

8585885 发表于 2008-12-17 00:59

下不了了老板!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

8585885 发表于 2008-12-17 01:05

有没有谁可以提供下载的啊,我在仓库里也没有看到啊

xxl1014 发表于 2008-12-23 17:06

用户 登录成功以后。。写入setUser()  还可以dump(getUser())

换到另一个function   getUser()为什么就会没数据了呢?

originwang 发表于 2009-11-8 16:40

支持,下载中

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.