thinkphp整合系列之rbac的升级版auth权限管理系统demo

权限管理基本是作为网站的标配了;

除非是像博客这类个人使用的;否则权限管理的重要性不言而喻;

今个就来写写auth权限管理;

thinkphp已经内置了auth权限类位于:/ThinkPHP/Library/Think/Auth.class.php

执行里面的sql生成3张表auth_rule、auth_group、auth_group_access;

然后自己再建一张users表;当然起其他的名字也是可以的;不过是需要在配置项中说明;

先对各表的作用简单介绍;

users:用户表;这个不废话;

auth_group:用户组表;比如说超级管理员组、普通管理员组、编辑等等;同时记录每个管理组有哪些权限;

auth_group_access:用户、群组关联表;比如说用户1属于超级管理员、用户2属于普通管理员和编辑;

auth_rule:权限表;具体的每条权限是什么;

如果还没看过权限管理;那建议先看源代码;透彻学习一样东西;最好的方法就是研究源代码;

这里重点不是要讲auth的原理;而是要给一个auth的demo;

git源代码:https://github.com/baijunyao/thinkphp-bjyadmin

1:先下载项目并安装;

完成后分别点超级管理员登录和文章管理员登录;

你会发现他们的权限是不同的;看到的后台菜单是不一样的;

白俊遥博客

2:菜单管理

白俊遥博客

为了控制每种管理员都能看到那些菜单;所以要有菜单的管理;

操作的是demo中的admin_nav表

3:权限管理

白俊遥博客

具体的每项权限的名称和内容;我这里一般都是和菜单对应的;

但是会比菜单管理多出一些;对比两张图即可看出来;多出来的一般都是些对菜单的增删改;

操作的是demo中的auth_rule表;


4:用户组管理

白俊遥博客

这里就是增加管理组;并为每个管理组分配权限了;选中的就表示有权限看到或者操作了;

白俊遥博客

5:管理员列表

白俊遥博客

把所有的管理员都列出来;可以添加管理员或者修改管理员的管理组;

白俊遥博客


当构建好这样一个结构后;权限管理简单其实只需要AdminBaseController.class.php中如下一段代码就完成了;

/Application/Common/Controller/AdminBaseController.class.php

$auth=new \Think\Auth();
$rule_name=MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME;
$result=$auth->check($rule_name,$_SESSION['user']['id']);
if(!$result){
    $this->error('您没有权限访问');
}

这也是在 thinkphp的目录结构设计经验总结  中讲述 /Application/Common/Controller中建各种BaseController的原因;


白俊遥博客
请先登陆后发表评论
  • 最新评论
  • 总共32条评论
白俊遥博客

Serene:我写了一个函数调用orderData(),参数也照常是order_number,点击排序后返回排序成功,但是界面并不是排序后的结果。表单action正确,查了好久,不知道是什么错误,你知道是哪里出错了么?

2016-12-08 14:55:10 回复

白俊遥博客

Serene:你好,\Org\Nx\Data::channelLevel() 调用该方法,得到的数据里面字段mca代表什么呢?不是很明白Data类,我要在你的demo做二次开发,这个类必须弄完全明白么?该怎么读更容易弄懂这个类呢?

2016-12-06 18:34:15 回复

白俊遥博客
  • Serene 回复 Serene:mca知道了。 getTreeData得到的是一个三维数组?我新建菜单,但在左侧菜单并没有显示出来,是什么情况呢?还有关于菜单排序的问题,添加新的二级菜单,为什么有的时候是├─和└─会乱?
  • 2016-12-07 10:24:49 回复
白俊遥博客
  • Serene 回复 Serene:左侧菜单没显示出来的原因是我粗心把菜单的mca写错了。
  • 2016-12-07 10:47:44 回复
白俊遥博客

云水谣:我看程序中好几处出现 $v['_data']  这个没看懂出处啊 麻烦有空给回复下 

2016-12-05 16:56:10 回复

白俊遥博客
  • 云淡风晴 回复 云水谣:是这个生成树形结构的类定义的/ThinkPHP/Library/Org/Bjy/Data.class.php
  • 2016-12-05 22:31:19 回复
白俊遥博客

Serene:最近在学权限管理,学着学着把RBAC和tp自身的auth类给混淆了,希望博主有空分享下关于tp的auth类和RBAC具体区别在哪里,优缺点等等~先谢谢博主~\(≧▽≦)/~啦啦啦

2016-11-03 12:28:45 回复

白俊遥博客
  • 云淡风晴 回复 Serene:在写出来之前;可以先参考这篇文章:http://www.thinkphp.cn/topic/4029.html
  • 2016-11-03 23:59:34 回复
白俊遥博客

香蕉你个banana白俊遥博客白大神,admin_nav这个数据表里面有一个字段oreder_number代表什么意思,我一直搞不清楚代表什么意思

2016-09-21 15:45:15 回复

白俊遥博客
  • 云淡风晴 回复 香蕉你个banana:排序用的;决定了页面中显示的顺序;
  • 2016-09-21 22:08:52 回复
白俊遥博客
  • 香蕉你个banana 回复 云淡风晴:谢谢
  • 2016-09-22 09:25:29 回复
白俊遥博客

怯凡:看来写死了只能是二级菜单吧

2016-09-16 10:10:10 回复

白俊遥博客
  • 云淡风晴 回复 怯凡:恩恩;前端页面是写成二级页面的;如果需要多级;可以根据自己的业务来改;
  • 2016-09-16 14:55:55 回复
白俊遥博客

老魏:git下载下来代码,没有CSS和JS的样式呀? 俊哥,没有Public/aceadmin/这个文件夹,麻烦给看看呗

2016-09-12 11:30:48 回复

白俊遥博客
  • 云淡风晴 回复 老魏:是放在根目录下么?
  • 2016-09-12 21:54:25 回复
白俊遥博客

O(∩_∩)O:这个权限可以不给组设  给单个用户设置权限吗这个auth权限和普通的5张表的RBAC权限 有哪些区别

2016-09-09 15:10:07 回复

白俊遥博客
  • ☑独自呵呵~ 回复 O(∩_∩)O:你是想给单个操作节点设置权限吗 我写了一个对单节点设置权限的
  • 2016-09-09 16:11:07 回复
白俊遥博客
  • 云淡风晴 回复 O(∩_∩)O:概念是这样说的:http://www.thinkphp.cn/topic/4029.html
  • 2016-09-10 00:10:39 回复
白俊遥博客

Hello world.:谢谢啦,学到很多东西。

2016-09-05 16:15:28 回复

白俊遥博客

Hello world.:666

2016-09-05 16:15:04 回复

白俊遥博客

Hello world.:666

2016-09-05 16:15:02 回复

白俊遥博客

浅∮时♂光£:我用了你的后台  随着操作的不断增加  进入后台首页的时间越来越慢 有30多秒啊~

2016-09-02 11:27:51 回复

白俊遥博客
  • 云淡风晴 回复 浅∮时♂光£:感谢反馈;是360的cdn抽风了;已经替换为本地的jquery;拉取最新版的就可以了;或者根据新提交的git来修改你的项目;
  • 2016-09-02 12:07:37 回复
白俊遥博客
  • 浅∮时♂光£ 回复 云淡风晴:哦  知道了 还有一个问题 我加了一个后台单入口, 直接进入的话会跳过登录界面,我另建这个单入口的目的是因为前台做分页的时候会报错 找不到模块 
  • 2016-09-02 12:23:02 回复
白俊遥博客
  • 云淡风晴 回复 浅∮时♂光£:继承了/Application/Common/Controller/AdminBaseController.class.php 的控制器才会有权限检测;
  • 2016-09-03 10:39:03 回复
白俊遥博客

Y:俊哥, 想问下,BaseModel.class和AuthRuleModel.class这两个文件中都有了deleteData这个方法, 这样写有什么想法?不过也是加了个判断而已.  但如果调用D('AuthRule')的话, 则是优先调用了AuthRuleModel.class中的方法

2016-08-31 17:21:54 回复

白俊遥博客
  • 云淡风晴 回复 Y:这只是个示例;在别的业务中;可能就不止是一个判断了;可能有更多的逻辑;AuthRuleModel.class中的deleteData是会覆盖掉中的BaseModel.class的deleteData;
  • 2016-08-31 23:15:48 回复
白俊遥博客

简简单单:俊哥,我小白,你能说一下怎么安装到自己项目中吗?看了你这个,看见有点蒙蔽~谢谢

2016-08-31 16:29:19 回复

白俊遥博客
  • 云淡风晴 回复 简简单单:想整合到自己的项目中?那就要把后台的模块;数据库文件;还有html都拷过去了;
  • 2016-08-31 23:13:54 回复
白俊遥博客

╰_______________Semoon™:你好。请问一下这个权限设置他是设置用户组的权限。要是想对单个用户设置一些额外的权限要怎么做呢?

2016-08-29 17:43:14 回复

白俊遥博客
  • 云淡风晴 回复 ╰_______________Semoon™:你好;可以设置一个额外的组包含额外的权限;用户可以属于多个用户组;
  • 2016-08-29 22:14:49 回复
白俊遥博客

90启航科技:白大大这个新建模块模板添加成功后跳转新窗口,这个怎么改成跳转当前窗口啊

2016-08-22 12:25:11 回复

白俊遥博客
  • 云淡风晴 回复 90启航科技:不好意思;没太明白什么问题?
  • 2016-08-22 21:05:53 回复
白俊遥博客

白。:还有几个方法里传入了_level这个参数 这个参数是怎么来的

2016-08-18 15:49:24 回复

白俊遥博客
  • 云淡风晴 回复 白。:具体可以查看这个类:/ThinkPHP/Library/Org/Nx/Data.class.php
  • 2016-08-22 21:04:35 回复
白俊遥博客

白。:首先感谢博主分享,这里想问一下后台根据权限获得菜单的手传入的参数是怎么来的getTreeData('level','order_number,id');

2016-08-18 13:26:36 回复

白俊遥博客
  • 云淡风晴 回复 白。:这个是无限级分类用的:/ThinkPHP/Library/Org/Nx/Data.class.php
  • 2016-08-22 21:04:20 回复
白俊遥博客

I am Null!:菜单中也需要权限中的操作怎么办?最后还是内容一样了吗?

2016-08-11 17:59:18 回复

白俊遥博客

I am Null!:您好  为什么不直接对菜单进行权限操作呢?需要再建一个权限表,望解答我的疑惑,谢谢

2016-08-11 17:32:22 回复

白俊遥博客
  • 云淡风晴 回复 I am Null!:因为它们并不是完全一一对应的;权限肯定会比菜单多;比如说后台那个左侧导航菜单;只需要有一个文章列表菜单并不需要编辑文章、删除文章的菜单;编辑、删除文章这可以作为一个按钮;所以;如果直接对菜单进行权限操作文章列表是可以的;但是编辑、删除文章的按钮还是要有一张权限表来做限制;
  • 2016-08-11 17:46:30 回复
白俊遥博客
  • I am Null! 回复 云淡风晴:菜单中也需要权限中的操作怎么办?最后还是内容一样了吗?
  • 2016-08-11 17:59:03 回复
白俊遥博客
  • 云淡风晴 回复 I am Null!:这种设计的效果是;后台的每个菜单肯定都会对应一个权限;它们的内容是一样的;但是权限会比菜单多一些;多的就是那些需要权限控制的按钮;
  • 2016-08-11 18:05:10 回复
白俊遥博客

I am Null!:SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO)错误位置FILE: D:\phpStudy\WWW\shuaibai123-thinkphp-bjyadmin-master\thinkphp-bjyadmin\ThinkPHP\Library\Think\Db\Driver.class.php  LINE: 115这怎么排除?

2016-08-11 15:17:01 回复

白俊遥博客
  • I am Null! 回复 I am Null!:解决了是密码问题
  • 2016-08-11 15:29:08 回复
白俊遥博客

轨迹HLGC:请问博主是怎么控制对应用户只能获取有自己权限的菜单,因为看您的demo,文章管理员是不会显示非自己权限的菜单的,这一点是在哪里实现的呢,也是auth的check()方法么

2016-08-08 23:43:47 回复

白俊遥博客
  • 云淡风晴 回复 轨迹HLGC:http://git.oschina.net/shuaibai123/thinkphp-bjyadmin/blob/master/Application/Common/Controller/AdminBaseController.class.php  是用的check方法配合数据库中记录的权限;
  • 2016-08-09 14:13:24 回复
白俊遥博客

小号:请先登陆后发表评论

2016-08-03 10:43:25 回复

白俊遥博客

轨迹HLGC:新增一个新的三级的id就可以了,这个是否为正确的逻辑

2016-08-02 09:51:53 回复

白俊遥博客
  • 云淡风晴 回复 轨迹HLGC:pid的对应必须正确才可以正常遍历;
  • 2016-08-03 16:38:54 回复
白俊遥博客

轨迹HLGC:您好呀,请问data.class,是否限制了遍历级别,在遍历树形结构时,第三层会无法添加数据,请问如何修改这个层级

2016-08-02 09:40:03 回复

白俊遥博客
  • 云淡风晴 回复 轨迹HLGC:没有限制的;
  • 2016-08-03 16:38:29 回复
白俊遥博客

后端-晨阳:你好  这个文章管理员 与超级管理员 没有啊

2016-07-29 13:25:24 回复

白俊遥博客
  • 云淡风晴 回复 后端-晨阳:程序是否正常安装成功了?
  • 2016-07-31 03:01:04 回复
白俊遥博客

Hearing aids boy's²º¹⁶:提示数据库连接失败,我式了本地和阿里云的都提示一样

2016-07-28 11:18:42 回复

白俊遥博客
  • 云淡风晴 回复 Hearing aids boy's²º¹⁶:是走的安装流程么?环境是否开启了mysqli?
  • 2016-07-28 12:56:24 回复
白俊遥博客

堂满玉金  ???

2016-07-18 13:54:17 回复

白俊遥博客
  • 云淡风晴 回复 堂满玉金:哈哈;这是故意写的;
  • 2016-07-18 20:33:41 回复
白俊遥博客

Passer:这种权限设计就是太工程思维了

2016-06-21 23:55:35 回复

白俊遥博客

缘分:http://www.9vm.cn/ 你看看嘛

2016-05-23 16:54:03 回复

白俊遥博客

缘分:安装登录后怎么找不到文件啊

2016-05-23 16:27:46 回复

白俊遥博客
  • 云淡风晴 回复 缘分:怎么提示的呢?
  • 2016-05-23 16:46:15 回复
白俊遥博客
  • 缘分 回复 云淡风晴:登录成功跳转后就找不到文件啊
  • 2016-05-23 16:48:12 回复
白俊遥博客

第一缕阳光:博客不错哦

2016-05-19 17:47:58 回复

白俊遥博客
  • 云淡风晴 回复 第一缕阳光:跟你的比;差远了;
  • 2016-05-19 21:39:01 回复