ThinkPHP3.2.3完整版中對Auth.class.php的使用
一,先建立資料表
1、think_auth_rule,規則表
id:主鍵,
name:規則唯一標識,
title:規則中文名稱
status 狀態:為1正常,為0禁用,
condition:規則表示式,為空表示存在就驗證,不為空表示按照條件驗證
[sql] view plain copy
-
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;
2、think_auth_group 使用者組表
id:主鍵,
title:使用者組中文名稱,
rules:使用者組擁有的規則id, 多個規則”,”隔開,
status 狀態:為1正常,為0禁用
[sql] view plain copy
-
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;
3、think_auth_group_access 使用者組明細表
uid:使用者id,
group_id:使用者組id
[sql] view plain copy
-
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;
4.既然是對後臺管理員許可權認證,所以還需要建立後臺管理員表think_admin
[sql] view plain copy
-
DROP TABLE IF EXISTS `think_admin`;
-
CREATE TABLE `think_admin` (
-
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT `管理員ID`,
-
`username` varchar(255) DEFAULT NULL COMMENT `管理員賬號`,
-
`password` varchar(32) DEFAULT NULL COMMENT `管理員密碼`,
-
`ip` varchar(255) DEFAULT NULL COMMENT `最後登入IP地址`,
-
`login_time` int(11) DEFAULT NULL COMMENT `最後登入時間`,
-
`login_count` mediumint(8) NOT NULL COMMENT `登入次數`,
-
`status` tinyint(1) NOT NULL DEFAULT `1` COMMENT `賬戶狀態,禁用為0 啟用為1`,
-
`create_time` int(11) DEFAULT NULL COMMENT `建立時間`,
-
PRIMARY KEY (`id`)
-
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
5.建立一張網站會員使用者表think_user,許可權認證(後臺管理員對使用者表的增刪改查的許可權)
[sql] view plain copy
-
DROP TABLE IF EXISTS `think_user`;
-
CREATE TABLE `think_user` (
-
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT `管理員ID`,
-
`username` varchar(255) DEFAULT NULL COMMENT `管理員賬號`,
-
`password` varchar(32) DEFAULT NULL COMMENT `管理員密碼`,
-
`ip` varchar(255) DEFAULT NULL COMMENT `最後登入IP地址`,
-
`login_time` int(11) DEFAULT NULL COMMENT `最後登入時間`,
-
`login_count` mediumint(8) NOT NULL COMMENT `登入次數`,
-
`status` tinyint(1) NOT NULL DEFAULT `1` COMMENT `賬戶狀態,禁用為0 啟用為1`,
-
`create_time` int(11) DEFAULT NULL COMMENT `建立時間`,
-
PRIMARY KEY (`id`)
-
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
[sql] view plain copy
-
#便於測試,插入幾條資料
-
-
insert into think_user (`username`,`password`) values(`zhangsan`,`123456`);
-
insert into think_user (`username`,`password`) values(`lisi`,`123456`);
-
insert into think_user (`username`,`password`) values(`wangwu`,`123456`);
二,在使用Auth類前需要配置config.php
[php] view plain copy
-
`AUTH_CONFIG`=>array(
-
`AUTH_ON` => true, //認證開關
-
`AUTH_TYPE` => 1, // 認證方式,1為時時認證;2為登入認證。
-
`AUTH_GROUP` => `think_auth_group`, //使用者組資料表名
-
`AUTH_GROUP_ACCESS` => `think_auth_group_access`, //使用者組明細表
-
`AUTH_RULE` => `think_auth_rule`, //許可權規則表
-
`AUTH_USER` => `think_admin`//使用者資訊表
-
)
補充:完整的sql
[sql] view plain copy
-
# ************************************************************
-
# Sequel Pro SQL dump
-
# Version 4499
-
#
-
# http://www.sequelpro.com/
-
# https://github.com/sequelpro/sequelpro
-
#
-
# Host: localhost (MySQL 5.5.42)
-
# Database: thinkphp
-
# Generation Time: 2015-12-15 03:03:54 +0000
-
# ************************************************************
-
-
-
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-
/*!40101 SET NAMES utf8 */;
-
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
-
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=`NO_AUTO_VALUE_ON_ZERO` */;
-
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-
-
-
# Dump of table think_admin
-
# ————————————————————
-
-
DROP TABLE IF EXISTS `think_admin`;
-
-
CREATE TABLE `think_admin` (
-
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT `管理員ID`,
-
`username` varchar(255) DEFAULT NULL COMMENT `管理員賬號`,
-
`password` varchar(32) DEFAULT NULL COMMENT `管理員密碼`,
-
`ip` varchar(255) DEFAULT NULL COMMENT `最後登入IP地址`,
-
`login_time` int(11) DEFAULT NULL COMMENT `最後登入時間`,
-
`login_count` mediumint(8) NOT NULL COMMENT `登入次數`,
-
`status` tinyint(1) NOT NULL DEFAULT `1` COMMENT `賬戶狀態,禁用為0 啟用為1`,
-
`create_time` int(11) DEFAULT NULL COMMENT `建立時間`,
-
PRIMARY KEY (`id`)
-
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-
-
LOCK TABLES `think_admin` WRITE;
-
/*!40000 ALTER TABLE `think_admin` DISABLE KEYS */;
-
-
INSERT INTO `think_admin` (`id`, `username`, `password`, `ip`, `login_time`, `login_count`, `status`, `create_time`)
-
VALUES
-
(1,`admin2`,`123456`,NULL,NULL,0,1,NULL),
-
(2,`admin1`,`123456`,NULL,NULL,0,1,NULL),
-
(3,`admin`,`123456`,NULL,NULL,0,1,NULL);
-
-
/*!40000 ALTER TABLE `think_admin` ENABLE KEYS */;
-
UNLOCK TABLES;
-
-
-
# Dump of table think_auth_group
-
# ————————————————————
-
-
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;
-
-
LOCK TABLES `think_auth_group` WRITE;
-
/*!40000 ALTER TABLE `think_auth_group` DISABLE KEYS */;
-
-
INSERT INTO `think_auth_group` (`id`, `title`, `status`, `rules`)
-
VALUES
-
(1,`超級管理員`,1,`1,2,3,4,5`),
-
(2,`普通管理員`,1,`4,5`);
-
-
/*!40000 ALTER TABLE `think_auth_group` ENABLE KEYS */;
-
UNLOCK TABLES;
-
-
-
# Dump of table think_auth_group_access
-
# ————————————————————
-
-
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;
-
-
LOCK TABLES `think_auth_group_access` WRITE;
-
/*!40000 ALTER TABLE `think_auth_group_access` DISABLE KEYS */;
-
-
INSERT INTO `think_auth_group_access` (`uid`, `group_id`)
-
VALUES
-
(1,2),
-
(2,2),
-
(3,1);
-
-
/*!40000 ALTER TABLE `think_auth_group_access` ENABLE KEYS */;
-
UNLOCK TABLES;
-
-
-
# Dump of table think_auth_rule
-
# ————————————————————
-
-
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;
-
-
LOCK TABLES `think_auth_rule` WRITE;
-
/*!40000 ALTER TABLE `think_auth_rule` DISABLE KEYS */;
-
-
INSERT INTO `think_auth_rule` (`id`, `name`, `title`, `type`, `status`, `condition`)
-
VALUES
-
(1,`Admin/admin/role`,`角色管理`,1,1,“),
-
(2,`Admin/admin/index`,`管理員列表`,1,1,“),
-
(3,`Admin/Member/edit`,`會員資訊修改`,1,1,“),
-
(4,`Admin/Member/index`,`會員列表`,1,1,“),
-
(5,`Admin/Member/show`,`單個會員資訊檢視`,1,1,“);
-
-
/*!40000 ALTER TABLE `think_auth_rule` ENABLE KEYS */;
-
UNLOCK TABLES;
-
-
-
# Dump of table think_user
-
# ————————————————————
-
-
DROP TABLE IF EXISTS `think_user`;
-
-
CREATE TABLE `think_user` (
-
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT `會員ID`,
-
`username` varchar(255) DEFAULT NULL COMMENT `會員賬號`,
-
`password` varchar(32) DEFAULT NULL COMMENT `會員密碼`,
-
`ip` varchar(255) DEFAULT NULL COMMENT `最後登入IP地址`,
-
`login_time` int(11) DEFAULT NULL COMMENT `最後登入時間`,
-
`login_count` mediumint(8) NOT NULL COMMENT `登入次數`,
-
`status` tinyint(1) NOT NULL DEFAULT `1` COMMENT `賬戶狀態,禁用為0 啟用為1`,
-
`create_time` int(11) DEFAULT NULL COMMENT `建立時間`,
-
PRIMARY KEY (`id`)
-
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-
-
LOCK TABLES `think_user` WRITE;
-
/*!40000 ALTER TABLE `think_user` DISABLE KEYS */;
-
-
INSERT INTO `think_user` (`id`, `username`, `password`, `ip`, `login_time`, `login_count`, `status`, `create_time`)
-
VALUES
-
(1,`wangwu`,`123456`,NULL,NULL,0,1,NULL),
-
(2,`lisi`,`123456`,NULL,NULL,0,1,NULL),
-
(3,`wangwu`,`123456`,NULL,NULL,0,1,NULL),
-
(4,`zhangsan`,`123456`,NULL,NULL,0,1,NULL);
-
-
/*!40000 ALTER TABLE `think_user` ENABLE KEYS */;
-
UNLOCK TABLES;
-
-
-
-
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
-
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
-
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
使用:
在某個控制的方法裡:
[php] view plain copy
-
//會員資訊編輯頁面展示
-
public function edit(){
-
//
-
session(`uid`,`3`); //設定session;
-
-
-
//下面程式碼動態判斷許可權
-
$auth = new Auth();
-
-
//var_dump($auth->getGroups(1));//獲得使用者所屬的所有使用者組
-
-
if(!$auth->check(MODULE_NAME.`/`.CONTROLLER_NAME.`/`.ACTION_NAME,session(`uid`))){
-
echo `沒有許可權`;
-
}else{
-
echo `有許可權`;
-
//todo…
-
}
-
-
-
$this->display(`add`);
-
}
也可以寫個公共控制器:
[php] view plain copy
-
<?php
-
namespace AdminController;
-
use ThinkController;
-
use ThinkAuth;
-
-
//公共的許可權認證控制器
-
class AuthController extends Controller {
-
protected function _initialize(){
-
//session不存在時,不允許直接訪問
-
if(!session(`aid`)){
-
$this->error(`還沒有登入,正在跳轉到登入頁`,U(`Public/login`));
-
}
-
-
//session存在時,不需要驗證的許可權
-
$not_check = array(`Index/clear/cache`,
-
`Index/edit/pwd`,`Index/logout`,`Admin/admin_list`,
-
`Admin/admin/list`,`Admin/admin/edit`,`Admin/admin/add`);
-
-
//當前操作的請求 模組名/方法名
-
if(in_array(MODULE_NAME.`/`.CONTROLLER_NAME.`/`.ACTION_NAME, $not_check)){
-
return true;
-
}
-
-
//下面程式碼動態判斷許可權
-
$auth = new Auth();
-
if(!$auth->check(MODULE_NAME.`/`.CONTROLLER_NAME.`/`.ACTION_NAME,session(`aid`)) && session(`aid`) != 1){
-
$this->error(`沒有許可權`);
-
}
-
}
-
}
相關文章
- MongoDB的mongo命令使用完整版MongoDB
- thinkphp3.2.3(4)PHP
- ThinkPHP3.2.3 欄位對映/自動驗證/自動完成PHP
- THINKPHP3.2.3入口配置PHP
- ThinkPHP3.2.3 關聯模型PHP模型
- 解決thinkPHP3.2.3使用Smarty模板後無法使用系統常量問題PHP
- Thinkphp3.2.3開發的個人部落格PHP
- D3.js中對array的使用JS
- 使用sysbench測試mysql及postgresql(完整版)MySql
- Meltdown的分析——完整版;-)
- 使用 thinkphp3.2.3開發的多城市、獨立二級域名論壇系統PHP
- thinkphp3.2.3原始碼學習(1)PHP原始碼
- thinkphp3.2.3原始碼學習(3)PHP原始碼
- 提問的智慧完整版
- [劍指offer] JAVA版題解(完整版)更新中。。。Java
- 基於Unity的A星尋路演算法(絕對簡單完整版本)Unity演算法
- 基於thinkphp3.2.3開發的個人部落格PHP
- Java實現五子棋對戰小遊戲【完整版】Java遊戲
- TS中 使用deprecated 實現對方法的迭代棄用
- 計算sysaux中各主件對sysaux空間的使用!UX
- Triplet較完整版
- ThinkPHP3.2.3 常見問題(不斷更新)PHP
- 使用 thinkphp3.2.3開發的全球多國家、獨立二級域名網站分類目錄PHP網站
- Android 完整版的下載示例Android
- protobuf 中的巢狀訊息的使用 主要對set_allocated_和mutable_的使用巢狀
- 基於ThinkPHP3.2.3開發的簡單cms(已開源)PHP
- 沒有人比我更會使用集合!對, 是dart中的集合Dart
- 對中級 Linux 使用者有用的 20 個命令Linux
- ElasticSearch中的對映Elasticsearch
- 對HTML中"#"的理解HTML
- 設計模式完整版設計模式
- MySQL完整版命令大全MySql
- thinkphp3.2.3 + bootstrap 二維碼線上生成平臺PHPboot
- Webpack 中 css import 使用 alias 相對路徑WebCSSImport
- vue+element-ui的分頁完整版VueUI
- thinkphp3.2.3開發的響應式通用官網CMS系統PHP
- thinkphp3.2.3入門示例2(URL傳引數的幾種方式)PHP
- beego 模板中對變數的對比Go變數