real-token

基于 tp6 的权限验证模块
授权协议 BSD
开发语言 PHP
所属分类 Web应用开发、 单点登录框架
软件类型 开源软件
地区 国产
投 递 者 益何平
操作系统 跨平台
开源组织
适用人群 未知
 软件概览
基于 tp6 的权限验证模块,参考 fastadmin 的 普通模块

目录结构

  • token/Driver.php规范token的方法和功能
  • token/driver/Mysql token的数据库驱动
  • token/driver/Redis token的Redis驱动
  • token.php token的链接token驱动并执行驱动的方法
  • auth.php 权限管理类

数据库

如果多模块的话,需要建立对应的用户表、用户分组表、用户权限表

/*
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 '手机号',
  `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 '连续登录天数',
  `maxsuccessions` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '最大连续登录天数',
  `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 '失败次数',
  `joinip` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '加入IP',
  `jointime` int(10) DEFAULT NULL COMMENT '加入时间',
  `createtime` int(10) DEFAULT NULL COMMENT '创建时间',
  `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 '状态',
  `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 '权限节点',
  `createtime` int(10) DEFAULT NULL COMMENT '添加时间',
  `updatetime` int(10) DEFAULT NULL COMMENT '更新时间',
  `status` enum('normal','hidden') COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '状态',
  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 '标题',
  `remark` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
  `ismenu` tinyint(1) DEFAULT NULL COMMENT '是否菜单',
  `createtime` int(10) DEFAULT NULL COMMENT '创建时间',
  `updatetime` int(10) DEFAULT NULL COMMENT '更新时间',
  `weigh` int(10) DEFAULT '0' COMMENT '权重',
  `status` enum('normal','hidden') COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '状态',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会员规则表';

-- ----------------------------
-- 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 '创建时间',
  `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;

驱动和配置

  $init= [
           // 驱动方式
           'type'     => 'Mysql',
           'table'     =>"admin_token",//如果是Mysql使用的存储token的表名
           
           'userprefix'=>"up:",//如果是Redis使用的存储用户名前缀
           'tokenprefix'=>"tp:",//如果是Redis使用的存储token前缀
           // 缓存前缀
           'key'      => '30tvUyXl8NkOx7YKDAoLu5FQRIGTh4qa',
           // 加密方式
           'hashalgo' => 'ripemd160',
           // 缓存有效期 0表示永久缓存
           'expire'   => 0,
       ];  
       $usertable="admin";//用户表名,自动对应用户分组表、用户权限表 如用户表名:admin,那么用户分组名:admin_group,用户权限表:admin_rule

token类的使用和功能

这里基本不会用到,主要用的是auth类

   /**
       
       Token::init($init);
       
       //判断Token是否可用
       Token::check($token, $user_id);
       //获取Token内的信息
       Token::get($token, $default = false);
       //写入Token
       Token::set($token, $user_id, $expire = null);
       //删除Token
       Token::delete($token);
       //清除Token
       Token::clear($user_id = null);

auth的羁绊用法

基础用法

              //登录
              // $username="admin";
              // $password="123456"; 
              //  $this->auth->login($username, $password);
              //   $this->auth->getUser()
              // $this->auth->getUserinfo()
              //读取当前token
              // $this->auth->getToken()
              // 判断是否登录
              // $this->auth->isLogin()
              //获取会员组别规则列表
              // $this->auth->getRuleList() 
                
              // 设置当前请求的URI
              // $controllername= $this->request->controller();  
              // $actionname= $this->request->action();  
              // $path = str_replace('.', '/', $controllername) . '/' . $actionname;
              // $this->auth->setRequestUri($path);  
              // 获取当前请求的URI
              // $this->auth->getRequestUri()
              //检测是否是否有对应权限
              // $this->auth-> check($path)
              //根据Token初始化
              //  $token="1f52e96b-8919-49d0-8ba9-6c4619aa4b8a";
              //  $this->auth->init($token);
              //注册
              // $username="admin2";
              // $password="admin2"; 
              // $email = '18354393242@163.com';
              // $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的公共构造方法使用 验证权限

      //权限验证
      $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);
          }
          // 判断是否需要验证权限
          if (!$this->auth->match($this->noNeedRight)) {
              // 判断控制器和方法判断是否有对应权限
              if (!$this->auth->check($path)) {
                  return $this->error('You have no permission', null, 403);
              }
          }
      } else {

          // 如果有传递token才验证是否登录状态
          if ($token) {
              $this->auth->init($token);
          }
      }
      var_dump($this->auth->getUser());`
  • 基础介绍 基于tp6的jwt模块 下载地址 数据库 如果多模块的话,需要建立对应的用户表、用户分组表、用户权限表 /* Navicat MySQL Data Transfer Source Server : real-think Source Server Version : 50734 Source Host : 8.136.216.46:3306 Sour

  • array token_get_all ( string $source ) 解析提供的 source 源码字符,然后使用 Zend 引擎的语法分析器获取源码中的 PHP 语言的解析器代号 $tokens = token_get_all('<?php echo; ?>'); /* => array(

  • 目录 自定义认证类,验证token 请求头中:X_FORWARDED_FOR 代之什么? 三种IP具体含义: 集群 ,分布式 集群 分布式 集群和分布式及其区别: 自定义认证类,验证token import jwt from rest_framework_jwt.authentication import BaseAuthentication from rest_framework.excepti

  • http://practicalnodebook.com Description Practical Node.js will show you how to: Express.js 4 Web apps Build web apps with Express.js 4, MongoDB, and Jade template engine Jade Template engines Use var

  • real 开发人员 我 纯css样式库,延展性强,可和vue、jq等多中框架结合,等待更多版本 下面将 real-vue(组件化)开发人员 “卓爷” real-admin(后台框架) 开发人员 “卓爷”和我 real-think(php版本后台框架) 开发人员 “卓爷”和我 real-auth-token(php版本权限验证) 开发人员 我

 相关资料
  • 在 手摸手,带你用 vue 撸后台 系列二(登录权限篇) 这篇文章中其实已经详细介绍过了。 该项目中权限的实现方式是:通过获取当前用户的权限去比对路由表,生成当前用户具有的权限可访问的路由表,通过 router.addRoutes 动态挂载到 router 上。 但其实很多公司的业务逻辑可能不是这样的,举一个例子来说,很多公司的需求是每个页面的权限是动态配置的,不像本项目中是写死预设的。但其实原理

  • 接口说明 验证权限 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 GET /authcenter/api/verify/v1.0.0/checkPermissions 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN permissions strin

  • 接口说明 验证权限 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /authcenter/api/verify/v1.0.0/checkP

  • 任何控制器请求,都会执行控制器的onRequest函数,当你的某个控制器需要对权限进行验证的时候,那幺请在子类中重写该函数。 protected function onRequest($action): ?bool { if(auth_fail){ $this->response()->write('auth fail'); return false;

  • X1.5.0新增 sp_auth_check($uid,$name=null,$relation='or') 功能: 用户权限验证 参数: $uid: 当前登录用户或者管理员的id $name:需要验证的规则列表,支持逗号分隔的权限规则或索引数组,默认为当前url $relation:如果为 'or' 表示满足任一条规则即通过验证;如果为 'and'则表示需满足所有规则才能通过验证 返回: 类型

  • 我一直在努力使我的JSON模式正确。我有一个属性,我必须根据它来确定所需的属性。下面是我的示例,我希望通过验证,因为不存在。 这是我希望通过验证的JSON 类似地,如果是,那么上述两个JSON的验证都应该通过。