权限管理在thinkphp有两种方式,比较常见用是RBAC,也是比较人用,容易理解,是基于节点的权限管理,Auth也可以做权限管理基于规则的权限管理,下面分别说说

1,Thinkphp RBAC权限管理,5张表就可以轻松搞点权限管理

用户表 think_username

id name password

用户组表(也被称为角色表) think_group

gid gname

用户和角色之间关系表 think_group_user

id uid gid

权限表(也被称为访问权限表,控制器,方法之间的表,也被称为节点表)think_role

id jname

角色和权限之间的表 think_role_group

id gid jid

#代码找不到了,具体可参考幕课网RBAC视频教程

2,Thinkphp Auth权限管理基于规则的

Auth权限认证是按规则进行认证。 在数据库中我们有

规则表(think_auth_rule)
用户组表(think_auth_group)
用户组明显表(think_auth_group_access)
我们在规则表中定义权限规则, 在用户组表中定义每个用户组有哪些权限规则,在用户组明显表中定义用户所属的用户组。

<?php
namespace Home\Controller;use Think\Auth;
use Think\Controller;
use Think\Page;class AuthController extends CommonController
{/*** 规则列表*/public function index(){$rules = M('AuthRule')->select();$count = count($rules);$page = new Page($count,10);// 实例化分页类 传入总记录数和每页显示的记录数(10)$show = $page->show();// 分页显示输出$menu1 = M('AuthRule')->where(array('pid'=>0))->select();$rules = M('AuthRule')->limit($page->firstRow.','.$page->listRows)->select();$this->assign('page',$show);$this->assign("count",$count);$this->assign("rules",$rules);$this->assign("menurules",$menu1);$this->display();}/*** 查找规则*/public function findrule(){$cond = array('id'=>$_POST['id']);$rule = M('AuthRule')->where($cond)->find();$this->ajaxReturn($rule,'json');}/*** 添加规则*/public function add(){$rules = M('AuthRule')->where(array('pid'=>0))->select();if ($_POST){$name  = $_POST['name'];$title = $_POST['title'];$type = $_POST['type'];$status = $_POST['status']?$_POST['status']:0;$condition = $_POST['condition'];$pid = $_POST['pid'];$ismenu = $_POST['ismenu'];$sort_order = $_POST['sort_order'];$data = compact('name','title','type','status','condition','pid','ismenu','sort_order');M('AuthRule')->add($data);alert('添加成功','/home/auth/index');}$this->assign("rules",$rules);$this->display();}/*** 修改规则*/public function editrule(){if ($_POST['id']){$data = array('name'=>$_POST['name'],'title'=>$_POST['title'],'status'=>$_POST['status']?$_POST['status']:0,'condition'=>$_POST['condition']?$_POST['condition']:0,'pid'=>$_POST['pid'],'ismenu'=>$_POST['ismenu'],'sort_order'=>$_POST['sort_order']);M('AuthRule')->where(array('id'=>$_POST['id']))->save($data);}$re = array('code'=>1,'message'=>'success');$this->ajaxReturn($re,'json');}/*** 删除规则*/public function delrule(){$id = $_GET['id'];if ($id){M('AuthRule')->where(array('id'=>$id))->delete();alert("删除成功!",'/home/auth/index');}else{alert("删除失败",'/home/auth/index');}}/*** 规则组*/public function authGroup(){$groupRules = M('AuthGroup')->select();$count = count($groupRules);$this->assign("count",$count);$this->assign('groupRules',$groupRules);$this->display();}/*** 添加规则组*/public function addAuthGroup(){$rules = M('AuthRule')->select();$auth = new Auth();$rules = $auth->unlimitedForLayer($rules);if ($_POST){$postrules = $_POST['rules'];$cond['id'] = array('in',$postrules);$crules = M('AuthRule')->where($cond)->select();$auth = new Auth();$data = $auth->childForLayer($crules);$saverules = implode(",",array_column($data,'id'));$data = array('title'=>$_POST['title'],'status'=>$_POST['status'],'rules'=>$saverules);M('AuthGroup')->add($data);alert("添加成功",'/home/auth/authGroup');}$this->assign('rules',$rules);$this->display();}/*** 修改规则组页面*/public function editAuthGroup(){$id = $_GET['id'];$group = M('AuthGroup')->where(array('id'=>$id))->find();$grouprules = explode(',', trim($group['rules'], ','));$rules = M('AuthRule')->select();/**************************************************/$auth = new Auth();$rules = $auth->unlimitedForLayer($rules);
//        print_r($rules);die();/**************************************************/$this->assign('rules',$rules);$this->assign('grouprules',$grouprules);$this->assign('group',$group);$this->display();}/*** 修改规则组逻辑*/public function updateAuthGroup(){$postrules = $_POST['rules'];$cond['id'] = array('in',$postrules);$rules = M('AuthRule')->where($cond)->select();$auth = new Auth();$data = $auth->childForLayer($rules);$rules = implode(",",array_column($data,'id'));$data = array('title'=>$_POST['title'],'status'=>$_POST['status']?$_POST['status']:0,'rules'=>$rules);M('AuthGroup')->where(array('id'=>$_POST['id']))->save($data);alert("添加成功",'/home/auth/authGroup');}/*** 删除规则组*/public function delGroup(){$id = $_GET['id'];$re = M('AuthGroup')->where(array('id'=>$id))->delete();if ($re){alert('删除成功','/home/auth/authGroup');}else{alert('删除失败','/home/auth/authGroup');}}/*** 用户组*/public function userGroup(){$users = M('admin a')->join('yixiang_auth_group_access agc on a.id=agc.uid')->join('yixiang_auth_group ag on ag.id = agc.group_id')->field('a.id as id,a.username as username,ag.title as title')->select();
//        dump($users);die();$groups =  M('AuthGroup ag')->select();$count = count($users);$this->assign('users',$users);$this->assign('groups',$groups);$this->assign('count',$count);$this->display();}/*** 编辑用户组*/public function editgroup(){if ($_POST){$uid = $_POST['userid'];$groupid = $_POST['groupid'];$data = array('group_id'=>$groupid);M('AuthGroupAccess')->where(array('uid'=>$uid))->save($data);$returndata = array('code'=>1,'message'=>'success');$this->ajaxReturn($returndata);}}public function getOnemenu(){$menu = M('AuthRole')->where(array('pid'=>0))->select();return $menu;}public function setmenu(){$this->display('Common/nav');}
}

Thinkphp中Auth认证相关推荐

  1. Django源码分析6:auth认证及登陆保持

    django源码分析 本文环境python3.5.2,django1.10.x系列 1.这次分析django框架中登陆认证与接口权限检查. 2.在后端开发中,难免会对接口进行权限验证,其中对于接口是否 ...

  2. Laravel 5.5 使用 Passport 实现 Auth 认证

    最近在写一个前后端分离项目,本来想用 Jwt-auth + Dingo 开发的,但是略感笨重,于是想到了 Laravel 的 Passport 和 5.5 新出的 Api Resource.Larav ...

  3. 在AngularJS应用中实现认证授权

    在AngularJS应用中实现认证授权 在每一个严肃的应用中,认证和授权都是非常重要的一个部分.单页应用也不例外.应用并不会将所有的数据和功能都 暴露给所有的用户.用户需要通过认证和授权来查看应用的某 ...

  4. Django中的认证与权限 源码剖析

    rest_framework/request.py中部分认证和权限代码 def _authenticate(self):"""Attempt to authenticat ...

  5. django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块

    CBV加装饰器 第一种 @method_decorator(装饰器) 加在get上 第二种 @method_decorator(login_auth,name='get') 加在类上 第三种 @met ...

  6. 4种Spring Boot 实现通用 Auth 认证方式

    摘要: 文章介绍了 spring-boot 中实现通用 auth 的四种方式,包括传统 AOP.拦截器.参数解析器和过滤器,并提供了对应的实例代码,最后简单总结了下它们的执行顺序. 本文分享自华为云社 ...

  7. redis php教程pdf,ThinkPHP中简单使用Redis

    首先在配置文件中配置Reids //Redis 配置 'DATA_CACHE_PREFIX' => 'Redis_', //缓存前缀 'DATA_CACHE_TYPE'=>'Redis', ...

  8. Rest Api 项目添加 Basic Auth 认证

    title: Rest Api 项目添加 Basic Auth 认证 date: 2022-10-10 22:09 tags: [Java,Spring Boot,Rest Api,Basic Aut ...

  9. csrf跨站请求伪造,CBV添加装饰器,auth认证模块,基于django中间件设计项目功能

    文章目录 csrf跨站请求伪造 csrf的定义 csrf的分类 csrf的攻击过程 csrf的攻击条件 举例说明 Django提供的解决策略 csrf相关装饰器 FBV CBV 方法一(直接在类中的某 ...

最新文章

  1. CEGUI Lua 编码
  2. 突然发现我还有博客园的博客呢哈哈哈哈
  3. 黑马程序员之《String 类练习》
  4. 简单实用的js调试logger组件
  5. 03.结构化机器学习项目 W1.机器学习策略(1)
  6. Github客户端使用教程
  7. 北大AI第八讲 李航 自然语言处理的现实与挑战
  8. nfs文件共享服务器搭建详解
  9. MaxCompute全套攻略
  10. C# Reflection 反射
  11. git push --set-upstream origin wangxiao
  12. java中strlen,浅析C++中strlen函数的使用与模拟实现strlen的方法
  13. node.js使用ass生成视频字幕(上)
  14. CV 经典主干网络 (Backbone) 系列: 开篇
  15. unity相机远近缩放和拖拽移动
  16. 友点CMS采集自动采集伪原创发布
  17. Java动态追踪技术
  18. php中select from,关于php:SELECT * FROM MySQLi
  19. 抢占智能家居市场,海尔迎来多个竞争对手
  20. Trojan-Qt5一个纯净安装是必须的

热门文章

  1. linux下写sql语言,如何写这个sql语句?
  2. java 文件读入 数组,将文本文件读入2d数组java
  3. torch的拼接函数_从零开始深度学习Pytorch笔记(13)—— torch.optim
  4. Android 蓝牙4.0(BLE)开发实现对蓝牙的写入数据和读取数据
  5. 设计模式之---观察者模式
  6. 十、给小白看的第三篇Python基础教程
  7. 【Python金融量化 1- 100 】三、流行股票指数
  8. 清华大学刘知远教授新作,图神经网络最佳解锁方式 | 送书福利
  9. 新年第一战| 数字中国创新大赛·大数据赛道等你来战
  10. 直播 | 商汤科技X-Lab宋广录:大规模视觉检测任务的检测器设计与优化