Thinkphp中Auth认证
权限管理在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认证相关推荐
- Django源码分析6:auth认证及登陆保持
django源码分析 本文环境python3.5.2,django1.10.x系列 1.这次分析django框架中登陆认证与接口权限检查. 2.在后端开发中,难免会对接口进行权限验证,其中对于接口是否 ...
- Laravel 5.5 使用 Passport 实现 Auth 认证
最近在写一个前后端分离项目,本来想用 Jwt-auth + Dingo 开发的,但是略感笨重,于是想到了 Laravel 的 Passport 和 5.5 新出的 Api Resource.Larav ...
- 在AngularJS应用中实现认证授权
在AngularJS应用中实现认证授权 在每一个严肃的应用中,认证和授权都是非常重要的一个部分.单页应用也不例外.应用并不会将所有的数据和功能都 暴露给所有的用户.用户需要通过认证和授权来查看应用的某 ...
- Django中的认证与权限 源码剖析
rest_framework/request.py中部分认证和权限代码 def _authenticate(self):"""Attempt to authenticat ...
- django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块
CBV加装饰器 第一种 @method_decorator(装饰器) 加在get上 第二种 @method_decorator(login_auth,name='get') 加在类上 第三种 @met ...
- 4种Spring Boot 实现通用 Auth 认证方式
摘要: 文章介绍了 spring-boot 中实现通用 auth 的四种方式,包括传统 AOP.拦截器.参数解析器和过滤器,并提供了对应的实例代码,最后简单总结了下它们的执行顺序. 本文分享自华为云社 ...
- redis php教程pdf,ThinkPHP中简单使用Redis
首先在配置文件中配置Reids //Redis 配置 'DATA_CACHE_PREFIX' => 'Redis_', //缓存前缀 'DATA_CACHE_TYPE'=>'Redis', ...
- Rest Api 项目添加 Basic Auth 认证
title: Rest Api 项目添加 Basic Auth 认证 date: 2022-10-10 22:09 tags: [Java,Spring Boot,Rest Api,Basic Aut ...
- csrf跨站请求伪造,CBV添加装饰器,auth认证模块,基于django中间件设计项目功能
文章目录 csrf跨站请求伪造 csrf的定义 csrf的分类 csrf的攻击过程 csrf的攻击条件 举例说明 Django提供的解决策略 csrf相关装饰器 FBV CBV 方法一(直接在类中的某 ...
最新文章
- CEGUI Lua 编码
- 突然发现我还有博客园的博客呢哈哈哈哈
- 黑马程序员之《String 类练习》
- 简单实用的js调试logger组件
- 03.结构化机器学习项目 W1.机器学习策略(1)
- Github客户端使用教程
- 北大AI第八讲 李航 自然语言处理的现实与挑战
- nfs文件共享服务器搭建详解
- MaxCompute全套攻略
- C# Reflection 反射
- git push --set-upstream origin wangxiao
- java中strlen,浅析C++中strlen函数的使用与模拟实现strlen的方法
- node.js使用ass生成视频字幕(上)
- CV 经典主干网络 (Backbone) 系列: 开篇
- unity相机远近缩放和拖拽移动
- 友点CMS采集自动采集伪原创发布
- Java动态追踪技术
- php中select from,关于php:SELECT * FROM MySQLi
- 抢占智能家居市场,海尔迎来多个竞争对手
- Trojan-Qt5一个纯净安装是必须的
热门文章
- linux下写sql语言,如何写这个sql语句?
- java 文件读入 数组,将文本文件读入2d数组java
- torch的拼接函数_从零开始深度学习Pytorch笔记(13)—— torch.optim
- Android 蓝牙4.0(BLE)开发实现对蓝牙的写入数据和读取数据
- 设计模式之---观察者模式
- 十、给小白看的第三篇Python基础教程
- 【Python金融量化 1- 100 】三、流行股票指数
- 清华大学刘知远教授新作,图神经网络最佳解锁方式 | 送书福利
- 新年第一战| 数字中国创新大赛·大数据赛道等你来战
- 直播 | 商汤科技X-Lab宋广录:大规模视觉检测任务的检测器设计与优化