通用权限系统怎么设计

大家好, 我目前做了一个通用权限系统
也想跟大家讨论下
我的通用权限系统设计是更换权限时候尽量不要涉及到代码修改
这个是要认证的文件模块是acl
每当用户访问acl模块时候,如果开启了认证那么会调用这个类
然后这个类会根据$acl 的all或index等值去做认证检查。


把这个文件放在router/acl目录里面就可以了,框架会自动认证如果用户没有相应的正向授权是无法访问相应的限制的。
比如crud create方法 负向权限为17 那按照前面解释应该是 需要登录和组授权 就是$aclgroup 数组中create的4 45 8三个组,
首先会员没有登录将提示登录,如果会员不在这三个组是无法访问该方法的会提示没有权限。

目前router可以自己根据情况开启用acl控制 
方法是在xxxxRouter.class.php文件中 添加 public function isAcl(){}  
可以返回权限文件名比如返回curd,那么自动会调用curdACL.class.php类和名
curdRouter类设置验证
zend 和 cakephp是基于权限树来设计的。将相关权限存进权限树。验证时检查权限树。

基本原则仍是角色对象权限控制。但在检查时不是直接调用api,而是调用权限树API.
一种方式是设置权限集中在后台,如数据库;验证权限集中在权限树,如cake和zend,检查时只帮两个:一,是否登录;二是否允许。 而不查是否有这个那个权限。

第二种可能和你的一样了。即你的检查移到了前台:这个模块需要哪些权限?要模块里设定.

无论哪个,权限系统要清晰,健壮,适用
目前我这个前后台都可以
个人登录后会把权限数据查出来 个人权限是ID,这个ID会跟模块ID在一起
你访问那个模块,那个模块他自己也有自己的权限访问 在后台可以设置,因为我权限是存ID

这么些个权限可能不够用,比如同样是create,我在同一个模块页面可能有create资源1的权限,但是没有create资源2的权限,如何设置?
比如一个报表模块,假设要做导出动作,url是这样

一个是他可以加入各个组,从组中继承身份这个不用给用户分配的
  就像现实中,他是这个办公室部门的,那么他有这个部门身份权限
  他可以是多个部门的,那么他有多个部门身分权限这个从组继承来
二个是管理员可以给他设置身份,他可以保持有这个身份。

用户登录时候会用他的ID去查组的身份,然后取回他所在组的身份权限
然后是再去取个人身份表属于自己的身份,然后两个身份合并,因为可能有重复身份
然后再用总身份去取得权限资源表里面的权限回来,这样一个用户有了一个权限资源表了。

有了权限资源表,可以去访问资源了,比如访问curd程序模块pdf方法。如果自己权限资源
没有curd程序模块pdf方法这个ID,是不能方问的。因为curd程序模块pdf方法在资源表里面
注册了一行,是有一个ID值的。

如果用户有curd程序模块pdf方法ID,也可以访问了。现在只是能够访问而已,
如果curd程序模块pdf方法还设置了时间或日期,如果不在设置的时间或日期间也不能访问

如果curd程序模块pdf方法设置了要组合身份或组的组合
比如必需要有导出pdf和excel身份才能访问那么,和用户有pdf权限也不能访问。会提示权限不够
那为什么用户有了pdf权限按理应该说可以导出pdf文件了,为什么还要设置一个关卡。
设计意思是因为有些人可能有交叉身份。比如我这A组有导出pdf身份,同时A组还有一个导出excel身份
但是A组里面如果都全是A组的人马都有这两个功能,现在你虽然有A组权限但是你只有一个pdf权限
现在A组为了保证是A组人员才行,所以设置了必需要pdf和excel身份还有必需是A组组员。
来源:英超直播

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值