权限管理基本是作为网站的标配了;
除非是像博客这类个人使用的;否则权限管理的重要性不言而喻;
今个就来写写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的原因;
本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客https://baijunyao.com 欢迎捐赠赞赏加入组织创建QQ群及捐赠渠道
何 遇:大哥 你的节点控制,auth_role 里面没有对应的控制器,页面上为什么有数据?
2019-05-08 20:35:18 回复
小六HI:Laravel 权限认证啥时候出个教程呢?zizaco/entrust 这个包好久不更新了。
2019-03-06 11:31:23 回复
い_____阿狸丶:大神,什么时候出一套关于TP5的
2018-11-06 10:14:22 回复
式微:遥哥我要给你生猴子
2018-05-07 10:30:12 回复
追风筝的人:就是这种一个管理员对应多个角色 ,感觉一个管理员对应一个角色才最好吧
2017-08-22 16:04:19 回复
黄粱:问个问题,类似于/article/12 这种类型的路由在RBAC当中该怎么设权限规则才能动态匹配呢
2017-08-16 15:29:22 回复
Lii:感觉学auth最好的方式就是直接看TP自带的auth源码,冒着被骂的风险上班研究写完了。 基本的思路其实不难,剩下的就是考虑简化授权流程比如权限分组快速选择
2017-08-06 23:40:33 回复
ˇ珍惜现在:关于菜单排序的问题,添加新的二级菜单,为什么有的时候是├─和└─会乱?这个该怎么修改呢?请指教
2017-05-04 18:02:40 回复
小蜗牛:俊哥,我想问下权限的配置管理在哪儿,我想把你的权限搬在我的项目上来,需要哪些操作,USER表名字不一样
2017-03-30 11:03:25 回复
可以:发起人发过吧
2017-03-06 16:53:38 回复
狗蛋的爹:你好,能给我一份sql吗?
2017-03-02 10:22:54 回复
大师兄:俊哥,给第3层权限添加子权限,比如添加文章再加个子权限,在权限分配页面没有展示出来。这里应该怎么搞。
2017-02-28 15:51:58 回复
变形金刚:找到了。
2017-01-22 15:46:38 回复
变形金刚:俊哥,sql文件在哪里,我没找到
2017-01-22 15:43:41 回复
吴伟祥:我也是看别的权限里面有这个 感觉挺好的
2017-01-09 16:51:30 回复
吴伟祥:if ($id==1) { $this->error('该分组不能被删除'); }这一句要加上,还有用户那个方法也是。刚刚误删,就要重装了!尴尬!/** * 删除用户组 */ public function delete_group(){ $id=I('get.id'); if ($id==1) { $this->error('该分组不能被删除'); } $map=array( 'id'=>$id ); $result=D('AuthGroup')->deleteData($map); if ($result) { $this->success('删除成功',U('Admin/Rule/group')); }else{ $this->error('删除失败'); } }
2017-01-09 16:50:11 回复
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 回复
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 回复
I am Null!:菜单中也需要权限中的操作怎么办?最后还是内容一样了吗?
2016-08-11 17:59:18 回复
I am Null!:您好 为什么不直接对菜单进行权限操作呢?需要再建一个权限表,望解答我的疑惑,谢谢
2016-08-11 17:32:22 回复
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 回复
小号:请先登陆后发表评论
2016-08-03 10:43:25 回复
Passer:这种权限设计就是太工程思维了
2016-06-21 23:55:35 回复
缘分:http://www.9vm.cn/ 你看看嘛
2016-05-23 16:54:03 回复
最新评论