thinkphp 权限验证
1.安装
composer require 5ini99/think-auth
2.引用
use think\auth\Auth;
3.权限检查代码
/**
* 权限检查
* @return bool
*/
protected function checkAuth()
{
if (!Session::has('admin_id')) {
$this->redirect('/admin/login');
}
$module = $this->request->module();
$controller = $this->request->controller();
$action = $this->request->action();
// 排除权限
$not_check = ['/Index/index', '/Index/welcome'];
$admin_id = Session::get('admin_id');
if (!in_array($module . '/' . $controller . '/' . $action, $not_check)) {
$auth = new Auth();
$admin_id = Session::get('admin_id');
if (!$auth->check($module . '/' . $controller . '/' . $action, $admin_id) && $admin_id != 1) {
$this->error('没有权限', '');
}
}
}
4.公共配置
// auth配置
'auth' => [
'auth_on' => 1, // 权限开关
'auth_type' => 1, // 认证方式,1为实时认证;2为登录认证。
'auth_group' => 'auth_group', // 用户组数据不带前缀表名
'auth_group_access' => 'auth_group_access', // 用户-用户组关系不带前缀表
'auth_rule' => 'auth_rule', // 权限规则不带前缀表
'auth_user' => 'member', // 用户信息不带前缀表
],
5.数据表
think_ 为自定义的数据表前缀
-- ----------------------------
-- think_auth_rule,规则表,
-- id:主键,name:规则唯一标识, title:规则中文名称 status 状态:为1正常,为0禁用,condition:规则表达式,为空表示存在就验证,不为空表示按照条件验证
-- ----------------------------
DROP TABLE IF EXISTS `think_auth_rule`;
CREATE TABLE `think_auth_rule` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` char(80) NOT NULL DEFAULT '',
`title` char(20) NOT NULL DEFAULT '',
`type` tinyint(1) NOT NULL DEFAULT '1',
`status` tinyint(1) NOT NULL DEFAULT '1',
`condition` char(100) NOT NULL DEFAULT '', # 规则附件条件,满足附加条件的规则,才认为是有效的规则
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- ----------------------------
-- think_auth_group 用户组表,
-- id:主键, title:用户组中文名称, rules:用户组拥有的规则id, 多个规则","隔开,status 状态:为1正常,为0禁用
-- ----------------------------
DROP TABLE IF EXISTS `think_auth_group`;
CREATE TABLE `think_auth_group` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`title` char(100) NOT NULL DEFAULT '',
`status` tinyint(1) NOT NULL DEFAULT '1',
`rules` char(80) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- ----------------------------
-- think_auth_group_access 用户组明细表
-- uid:用户id,group_id:用户组id
-- ----------------------------
DROP TABLE IF EXISTS `think_auth_group_access`;
CREATE TABLE `think_auth_group_access` (
`uid` mediumint(8) unsigned NOT NULL,
`group_id` mediumint(8) unsigned NOT NULL,
UNIQUE KEY `uid_group_id` (`uid`,`group_id`),
KEY `uid` (`uid`),
KEY `group_id` (`group_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
6.原理
Auth权限认证是按规则进行认证。 在数据库中我们有
规则表(think_auth_rule)
用户组表(think_auth_group)
用户组明显表(think_auth_group_access)
我们在规则表中定义权限规则, 在用户组表中定义每个用户组有哪些权限规则,在用户组明显表中定义用户所属的用户组。
面向对象程序设计(OOP)
基本信息
面向对象程序设计(Object Oriented Programming,OOP)是一种计算机编程架构。OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。OOP=对象+类+继承+多态+消息,其中核心概念是类和对象。
面向对象程序设计方法是尽可能模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类认识世界、解决现实问题的方法和过程,也即使得描述问题的问题空间与问题的解决方案空间在结构上尽可能一致,把客观世界中的实体抽象为问题域中的对象。
面向对象程序设计以对象为核心,该方法认为程序由一系列对象组成。类是对现实世界的抽象,包括表示静态属性的数据和对数据的操作,对象是类的实例化。对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。在面向对象的程序设计中,对象是组成程序的基本模块
特点
1、封装性:
封装是指将一个计算机系统中的数据以及与这个数据相关的一切操作语言(即描述每一个对象的属性以及其行为的程序代码)组装到一起,一并封装在一个有机的实体中,把它们封装在一个“模块”中,也就是一个类中,为软件结构的相关部件所具有的模块性提供良好的基础。在面向对象技术的相关原理以及程序语言中,封装的最基本单位是对象,而使得软件结构的相关部件的实现“高内聚、低耦合”的“最佳状态”便是面向对象技术的封装性所需要实现的最基本的目标。对于用户来说,对象是如何对各种行为进行操作、运行、实现等细节是不需要刨根问底了解清楚的,用户只需要通过封装外的通道对计算机进行相关方面的操作即可。大大地简化了操作的步骤,使用户使用起计算机来更加高效、更加得心应手。
2、继承性:
继承性是面向对象技术中的另外一个重要特点,其主要指的是两种或者两种以上的类之间的联系与区别。继承,顾名思义,是后者延续前者的某些方面的特点,而在面向对象技术则是指一个对象针对于另一个对象的某些独有的特点、能力进行复制或者延续。如果按照继承源进行划分,则可以分为单继承(一个对象仅仅从另外一个对象中继承其相应的特点)与多继承(一个对象可以同时从另外两个或者两个以上的对象中继承所需要的特点与能力,并且不会发生冲突等现象);如果从继承中包含的内容进行划分,则继承可以分为四类,分别为取代继承(一个对象在继承另一个对象的能力与特点之后将父对象进行取代)、包含继承(一个对象在将另一个对象的能力与特点进行完全的继承之后,又继承了其他对象所包含的相应内容,结果导致这个对象所具有的能力与特点大于等于父对象,实现了对于父对象的包含)、受限继承、特化继承。
3、多态性:
从宏观的角度来讲,多态性是指在面向对象技术中,当不同的多个对象同时接收到同一个完全相同的消息之后,所表现出来的动作是各不相同的,具有多种形态;从微观的角度来讲,多态性是指在一组对象的一个类中,面向对象技术可以使用相同的调用方式来对相同的函数名进行调用,即便这若干个具有相同函数名的函数所表示的函数是不同的
PHP中常用方法
PHP 求两个日期相差天数
function diffBetweenTwoDays ($day1, $day2)
{
$second1 = strtotime($day1);
$second2 = strtotime($day2);
if ($second1 < $second2) {
$tmp = $second2;
$second2 = $second1;
$second1 = $tmp;
}
return ($second1 - $second2) / 86400;
}
PHP中调用URL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.baidu.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
PHP文件操作
- “r” (只读方式打开,将文件指针指向文件头)
- “r+” (读写方式打开,将文件指针指向文件头)
- “w” (写入方式打开,清除文件内容,如果文件不存在则尝试创建之)
- “w+” (读写方式打开,清除文件内容,如果文件不存在则尝试创建之)
- “a” (写入方式打开,将文件指针指向文件末尾进行写入,如果文件不存在则尝试创建之)
- “a+” (读写方式打开,通过将文件指针指向文件末尾进行写入来保存文件内容)
- “x” (创建一个新的文件并以写入方式打开,如果文件已存在则返回 FALSE 和一个错误)
- “x+” (创建一个新的文件并以读写方式打开,如果文件已存在则返回 FALSE 和一个错误)
$file = fopen("test.txt","r");
$file = fopen("/home/test/test.txt","r");
$file = fopen("/home/test/test.gif","wb");
$file = fopen("http://www.example.com/","r");
$file = fopen("ftp://user:password@example.com/test.txt","w");
//写入数据
$content = "";
file_put_contents($path,$content, FILE_APPEND );
//读取从.csv文件
$fp = fopen($path, 'r');
while($line = fgetcsv($fp)){
echo $line;
}
fclose($fp);
PHPExcel
require_once '/www/wwwroot/tp5/public/phpexcel/PHPExcel.php';
$user_path = "/www/wwwroot/tp5/public/uploads/";
$objPHPExcel = new \PHPExcel();
// 设置sheet
$objPHPExcel->setActiveSheetIndex(0);
// 设置列的宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
// 设置表头
$objPHPExcel->getActiveSheet()->SetCellValue('A1', '昵称');
// 设置数据
$objPHPExcel->getActiveSheet()->SetCellValue('A' . $num, $v['nickname']);
// 文件名称
$fileName = "文件" . date('Y-m-d', time()) . rand(1, 1000);
$xlsName = iconv('utf-8', 'gb2312', $fileName);
//dump($xlsName);die;
// 设置工作表名
$objPHPExcel->getActiveSheet()->setTitle('sheet');
//下载 excel5与excel2007
$objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save($user_path.$fileName.'.xls');
TP5 数据库操作
官方链接 :
https://www.kancloud.cn/manual/thinkphp5/135176
查询一个数据使用:
Db::table('think_user')->where('id',1)->find();
查询数据集使用:
Db::table('think_user')->where('status',1)->select();