// 程序下载地址: http://phpx.com/happy/attachment.php?s=&postid=694646
这只是一个示例程序,因为时间关系,只写了一些简单的应用,其它的功能,靠你慢慢去发现。
权限是永恒的话题,如果本程序你有任何不明白的地方,都可以发信到我的邮箱 [email protected]来询问
产品开发目的是用在小弟下个产品OA中,是个商业程序,先发放这个代码,希望大家喜欢。
程序并未经过DEBUG测试,如因使用程序遇到的问题,本人负责解答,但带来的一切后果,本人概不负责
本来是要提供后台实例的,但由于时间关系,就不提供了。
就麻烦你在数据库里直接操作了。或者你可以写个后台,应该是很简单的。
程序运行:
首先,得到用户所在的 groups 通过 member_groups_relation关联得到查询语句请查看perm类中的 getMemberGroups()方法;
其次得到用户组所在的groups权限内容,此操作通过查询 groups_perm_relation 关联得到。查询语句你可以从perm类中的 getGroupsPerm()方法得到。
接着,我们要得到此用户的附加权限,也就是区别于他所在的权限组的权限,此操作通过member_perm_relation 表得到,查询语句可能参考 perm 类中的 getMemberAddPerm()方法。
在完成了以上操作后,我们要进行权限合并了。
通过perm中的getMemberAllPerm()方法得到所有此用户所有权限id即pid,其中用到的合并数组函数array_merge()及array_unique()移除数组中重复的值函数, 你可以查一下手册,得到更详细的说明。
因为本实例是为开发OA用的权限系统,所以,加入了更多人想要的隐藏无权限分类及文件。perm函数中的 getFatherMenuID()是比较重要的一环,我思考了许久才做出来,因为第一次这样做,不知效率如何,望大家测试。主要通过此方法得到相应权限的父线索ID,在此方法中,去了没有权限的分类,然后通过 getMemberPermAllList() 得到所有当前用户的分类及分类下拥有权限的文件列表,大家可以对本程序评论一下。
其中的另一个重点是checkPriv.calss.php 文件中的check()类,这个文件决定了是否有进入本页面的直接权限。工作原理如下:
1.首先得到当前文件需要的权限id即permission中的id
2.通过 check类中的checkFilePerm()方法检查用户是否有此项权限操作,根据获得的结果,返回true或者false
3.在相应的页面加入checkFilePerm()方法进入验证。至如如何得到的,请自行研究或者跟贴发问。
本例中所有用到的函数只有三个,都可以在includes/functin.php中找到,这是一个函数集。
之所以发表这个东西,是因为偶是第一次写这样的权限类,以前都是用别人的,也算是偶对村里的一个贡献吧,从村里获取的东西太多了。还有,以前答应了 PHP Family(31::838) 闲哥等人要求偶写的关于 php应用项目中的目录分配。其实这个目录分配还不够合理,但对于一般应用的企业网站来说。足够了。以后有机会把偶开发OA的目录架构方案拿出来供大家讨论。谢谢。
安装,新建数据库 perm 导入文件perm.sql。配置configs.inc.php,以配合程序运作。注意设置网站物理路径 define("ROOTPATH","x:/xxxxx");
因为时间紧没有写login程序,所以在index.php 声明了一个 $_SESSION['user']['uid'];如果你使用本程序,在设定session时,请遵守本程序的设定原则或者更改perm.class.php 文件中的 perm()方法:$this->mid = $_SESSION['user']['uid']为$this->mid = 你设定的session方法,如$_SESSION['userID'];
对,还有一点是此实例中包含了adodb及smarty的配置操作,前阵子大家讨论的比较多,初学者也可以通过此了解一点。不敢说是很棒的,但偶一直这样用,觉得很爽。
下载链接 http://phpx.com/happy/attachment.php?s=&postid=694646 // 里面是使用smart和adodb做的,推荐下载