<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          real-token基于 tp6 的權(quán)限驗證模塊

          聯(lián)合創(chuàng)作 · 2023-09-23 14:25

          基于 tp6 的權(quán)限驗證模塊,參考 fastadmin 的 普通模塊

          目錄結(jié)構(gòu)

          • token/Driver.php規(guī)范token的方法和功能
          • token/driver/Mysql token的數(shù)據(jù)庫驅(qū)動
          • token/driver/Redis token的Redis驅(qū)動
          • token.php token的鏈接token驅(qū)動并執(zhí)行驅(qū)動的方法
          • auth.php 權(quán)限管理類

          數(shù)據(jù)庫

          如果多模塊的話,需要建立對應(yīng)的用戶表、用戶分組表、用戶權(quán)限表

          /*
          Navicat MySQL Data Transfer
          
          Source Server         : real-think
          Source Server Version : 50734
          Source Host           : 8.136.216.46:3306
          Source Database       : real-think
          
          Target Server Type    : MYSQL
          Target Server Version : 50734
          File Encoding         : 65001
          
          Date: 2021-10-17 15:18:39
          */
          
          SET FOREIGN_KEY_CHECKS=0;
          
          -- ----------------------------
          -- Table structure for jm_admin
          -- ----------------------------
          DROP TABLE IF EXISTS `jm_admin`;
          CREATE TABLE `jm_admin` (
            `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
            `group_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '組別ID',
            `username` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '用戶名',
            `nickname` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '昵稱',
            `password` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '密碼',
            `salt` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '密碼鹽',
            `email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '電子郵箱',
            `mobile` varchar(11) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '手機(jī)號',
            `avatar` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '頭像',
            `level` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '等級',
            `gender` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '性別:0=女,1=男',
            `birthday` date DEFAULT NULL COMMENT '生日',
            `bio` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '格言',
            `money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '余額',
            `score` int(10) NOT NULL DEFAULT '0' COMMENT '積分',
            `successions` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '連續(xù)登錄天數(shù)',
            `maxsuccessions` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '最大連續(xù)登錄天數(shù)',
            `prevtime` int(10) DEFAULT NULL COMMENT '上次登錄時間',
            `logintime` int(10) DEFAULT NULL COMMENT '登錄時間',
            `loginip` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '登錄IP',
            `loginfailure` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '失敗次數(shù)',
            `joinip` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '加入IP',
            `jointime` int(10) DEFAULT NULL COMMENT '加入時間',
            `createtime` int(10) DEFAULT NULL COMMENT '創(chuàng)建時間',
            `updatetime` int(10) DEFAULT NULL COMMENT '更新時間',
            `token` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Token',
            `status` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '狀態(tài)',
            `verification` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '驗證',
            PRIMARY KEY (`id`),
            KEY `username` (`username`),
            KEY `email` (`email`),
            KEY `mobile` (`mobile`)
          ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='會員表';
          
          -- ----------------------------
          -- Table structure for jm_admin_group
          -- ----------------------------
          DROP TABLE IF EXISTS `jm_admin_group`;
          CREATE TABLE `jm_admin_group` (
            `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
            `name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '組名',
            `rules` text COLLATE utf8mb4_unicode_ci COMMENT '權(quán)限節(jié)點',
            `createtime` int(10) DEFAULT NULL COMMENT '添加時間',
            `updatetime` int(10) DEFAULT NULL COMMENT '更新時間',
            `status` enum('normal','hidden') COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '狀態(tài)',
            PRIMARY KEY (`id`)
          ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='會員組表';
          
          -- ----------------------------
          -- Table structure for jm_admin_rule
          -- ----------------------------
          DROP TABLE IF EXISTS `jm_admin_rule`;
          CREATE TABLE `jm_admin_rule` (
            `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
            `pid` int(10) DEFAULT NULL COMMENT '父ID',
            `name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名稱',
            `title` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '標(biāo)題',
            `remark` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '備注',
            `ismenu` tinyint(1) DEFAULT NULL COMMENT '是否菜單',
            `createtime` int(10) DEFAULT NULL COMMENT '創(chuàng)建時間',
            `updatetime` int(10) DEFAULT NULL COMMENT '更新時間',
            `weigh` int(10) DEFAULT '0' COMMENT '權(quán)重',
            `status` enum('normal','hidden') COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '狀態(tài)',
            PRIMARY KEY (`id`)
          ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='會員規(guī)則表';
          
          -- ----------------------------
          -- Table structure for jm_admin_token
          -- ----------------------------
          DROP TABLE IF EXISTS `jm_admin_token`;
          CREATE TABLE `jm_admin_token` (
            `token` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Token',
            `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '會員ID',
            `createtime` int(10) DEFAULT NULL COMMENT '創(chuàng)建時間',
            `expiretime` int(10) DEFAULT NULL COMMENT '過期時間',
            PRIMARY KEY (`token`)
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='會員Token表';
           
          

          引用

          下載到tp6的extend\jmwl下

          use jmwl\realjwt\Token;
          use jmwl\realjwt\Auth;
          

          驅(qū)動和配置

            $init= [
                     // 驅(qū)動方式
                     'type'     => 'Mysql',
                     'table'     =>"admin_token",//如果是Mysql使用的存儲token的表名
                     
                     'userprefix'=>"up:",//如果是Redis使用的存儲用戶名前綴
                     'tokenprefix'=>"tp:",//如果是Redis使用的存儲token前綴
                     // 緩存前綴
                     'key'      => '30tvUyXl8NkOx7YKDAoLu5FQRIGTh4qa',
                     // 加密方式
                     'hashalgo' => 'ripemd160',
                     // 緩存有效期 0表示永久緩存
                     'expire'   => 0,
                 ];  
                 $usertable="admin";//用戶表名,自動對應(yīng)用戶分組表、用戶權(quán)限表 如用戶表名:admin,那么用戶分組名:admin_group,用戶權(quán)限表:admin_rule
          

          token類的使用和功能

          這里基本不會用到,主要用的是auth類

             /**
                 
                 Token::init($init);
                 
                 //判斷Token是否可用
                 Token::check($token, $user_id);
                 //獲取Token內(nèi)的信息
                 Token::get($token, $default = false);
                 //寫入Token
                 Token::set($token, $user_id, $expire = null);
                 //刪除Token
                 Token::delete($token);
                 //清除Token
                 Token::clear($user_id = null);
          

          auth的羈絆用法

          基礎(chǔ)用法

                        //登錄
                        // $username="admin";
                        // $password="123456"; 
                        //  $this->auth->login($username, $password);
                        //   $this->auth->getUser()
                        // $this->auth->getUserinfo()
                        //讀取當(dāng)前token
                        // $this->auth->getToken()
                        // 判斷是否登錄
                        // $this->auth->isLogin()
                        //獲取會員組別規(guī)則列表
                        // $this->auth->getRuleList() 
                          
                        // 設(shè)置當(dāng)前請求的URI
                        // $controllername= $this->request->controller();  
                        // $actionname= $this->request->action();  
                        // $path = str_replace('.', '/', $controllername) . '/' . $actionname;
                        // $this->auth->setRequestUri($path);  
                        // 獲取當(dāng)前請求的URI
                        // $this->auth->getRequestUri()
                        //檢測是否是否有對應(yīng)權(quán)限
                        // $this->auth-> check($path)
                        //根據(jù)Token初始化
                        //  $token="1f52e96b-8919-49d0-8ba9-6c4619aa4b8a";
                        //  $this->auth->init($token);
                        //注冊
                        // $username="admin2";
                        // $password="admin2"; 
                        // $email = '[email protected]';
                        // $mobile= '18354393243';
                        // $this->auth-> register($username, $password, $email, $mobile, $extend = [])
                        //加密密碼
                        //$this->auth->getEncryptPassword($oldpassword, $this->_user->salt);
                        //退出
                         //  $this->auth->logout()
                         //真實刪除
                        //  $this->auth->delete($user_id)
                        
                        //查看報錯
                        // $this->auth->getError()  
           

          php的公共構(gòu)造方法使用 驗證權(quán)限

                //權(quán)限驗證
                $this->auth = Auth::instance($init, $usertable);
                $this->request = Request::instance();
          
                // token
                $token = $this->request->server('HTTP_TOKEN');
          
                $controllername = $this->request->controller();
                $actionname = $this->request->action();
                $path = str_replace('.', '/', $controllername) . '/' . $actionname;
                $this->auth->setRequestUri($path);
                // 檢測是否需要驗證登錄
                if (!$this->auth->match($this->noNeedLogin)) {
          
                    //初始化
                    $this->auth->init($token);
                    //檢測是否登錄
                    if (!$this->auth->isLogin()) {
          
                        return $this->error('Please login first', null, 401);
                    }
                    // 判斷是否需要驗證權(quán)限
                    if (!$this->auth->match($this->noNeedRight)) {
                        // 判斷控制器和方法判斷是否有對應(yīng)權(quán)限
                        if (!$this->auth->check($path)) {
                            return $this->error('You have no permission', null, 403);
                        }
                    }
                } else {
          
                    // 如果有傳遞token才驗證是否登錄狀態(tài)
                    if ($token) {
                        $this->auth->init($token);
                    }
                }
                var_dump($this->auth->getUser());`
          
          瀏覽 17
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  伊人大香蕉www | 久久免费少妇做爰高潮彭水 | 免费黄色一级片 | 极品少女萝莉被操 | 久久av网站 |