zdppy+vue3+onlyoffice文档管理系统实战 20240906 上课笔记 整合权限校验中间件

news2024/9/22 16:51:51

基于角色方法的中间件基本用法

import zdppy_api as api
import zdppy_apimidauth


async def index(request):
    return api.resp.success()


async def login(request):
    token = zdppy_apimidauth.get_role_token(role="admin")
    return api.resp.success(token)


auth_dict = {
    "admin": {
        "GET:/": True,
        "GET:/1": False,
    }
}


async def has_auth_func(role, method, path):
    """校验角色对method和path是否有访问权限"""
    print(role, method, path)
    if not str(path).startswith("/"):
        path = f"/{path}"

    # GET:/1
    auth = str(method).upper() + ":" + path

    # 判断是否有权限
    role_auth_dict = auth_dict.get(role)
    if not isinstance(role_auth_dict, dict):
        return False
    if not role_auth_dict.get(auth):
        return False

    return True


app1 = api.Api(
    routes=[
        api.resp.get("/", index),
        api.resp.get("/1", index),
        api.resp.post("/login", login),
    ],
    middleware=[
        # 默认是:zhangdapeng zhangdapng520
        # 可以传入账号和密码进行覆盖
        zdppy_apimidauth.roleapi(has_auth_func)
    ]
)

if __name__ == '__main__':
    app1.run()

解析Token的方法


import zdppy_jwt as jwt
import zdppy_env as env

env.load("../.env")

key = env.get("JWT_KEY")
token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjE4MzE2NTM2NjMzODEyOTkyMDAiLCJ1c2VybmFtZSI6ImFkbWluIiwicm9sZV9pZCI6bnVsbCwicm9sZSI6bnVsbCwicm9sZV9kaWN0Ijp7fSwiZXhwaXJlZCI6MTcyNTU2MDA0OC44MjI1Mjh9.23iRSnug4xHdWEIRLTaZsTi4vCzOjFS5UIFB0AT_Jmw"
userinfo = jwt.parse_token(token, key=key)
print(userinfo)

解析得到下面的东西:

{'id': '1831653663381299200', 'username': 'admin', 'role_id': None, 'role': None, 'role_dict': {}, 'expired': 1725560048.822528}

整合权限校验中间件

import zdppy_api as api
import zdppy_env as env
import zdppy_mcrud as mcrud
import routes
import zdppy_apimidauth
from zdppy_log import logger

env.load(".env")

db = mcrud.new_env()


async def has_auth_func(role, method, path):
    """校验角色对method和path是否有访问权限"""
    logger.debug("正在校验接口权限", role=role, method=method, path=path)
    return True


app = api.Api(
    routes=[
        *routes.get_routes(db),
    ],
    middleware=[
        api.middleware.cors(),
        zdppy_apimidauth.roleapi(has_auth_func, env.get("JWT_KEY"))
    ],
)

if __name__ == "__main__":
    app.run(port=18888)

如果没有传Token

在这里插入图片描述

带上Token

在这里插入图片描述

错误的Token

在这里插入图片描述

我传的是无效的Token,但是返回的是服务器内部错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2111216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单例模式的总结

常规模式:有属性/构造方法/普通方法,也可以在类中执行主方法,也可以在test类中执行主方法 单例模式是什么? 单例模式:类只有1个对象;保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式是在内存中 仅会创建一次对象 的设计模式特点: 成员是 私有的静态的 构…

手机扬声器音量总是不够大?试试“扬声器助推器”吧

手机的扬声器音量总是不够大,尤其是在嘈杂的环境中,音乐和视频的声音总是不太清晰。直到我发现了这款“扬声器助推器”,我的手机音质瞬间提升了好几个档次。 软件简介: “扬声器助推器”利用先进的音频处理技术,能够…

中国各银行流动性比例数据(2000-2022年)

介绍中国银行业2000年至2022年间的流动性比例数据,涵盖500多家银行,包括城市商业银行、城镇银行、大型商业银行、股份制银行、民营银行、农村合作银行、农村商业银行、农村信用社等。这些数据对于理解中国银行业的流动性状况至关重要,有助于投…

ansible+awx搭建

1、环境介绍 操作系统版本:龙蜥os 8.9 docker 版本:26.0.2 python版本:3.11.9 ansible版本:2.16.6 awx版本:24.2.0 2、安装docker 设置软件源 yum install -y yum-utilsyum-config-manager \--add-repo \https://mirr…

【生日视频制作】长腿美女模特坐在椅子上打招呼大屏幕AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程长腿美女模特坐在椅子上打招呼大屏幕文字AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】长腿美女模特坐在椅子上打招呼大屏幕AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 安装A…

Google play最新政策更新和重要提醒

我们都知道,谷歌会定期更新其政策,而政策的变更通常对开发者及其团队的要求会更为严格,也会增加应用上架的一些限制条件,以此提高应用在谷歌商店的质量。 一起来看看Google play最近的一些政策更新和需要注意的地方。 新政策要求 …

2024高教社杯全国大学生数学建模竞赛C题精美可视化(python代码)

2024高教社杯全国大学生数学建模竞赛C题原创python代码 C题题目:农作物的种植策略 先给大家看看图吧: #描述性统计分析 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from scipy.stats import kurt…

DWPD指标:为何不再适用于大容量SSD?

固态硬盘(Solid State Drives, SSD)作为计算机行业中最具革命性的技术之一,凭借其更快的读写速度、增强的耐用性和能效,已经成为大多数用户的首选存储方案。然而,如同任何其他技术一样,SSD也面临自身的挑战…

vite创建的vue项目怎么使用jsx来实现elementPlus表格表尾的合计有多行大的方法

vite创建的vue3项目安装vitejs/plugin-vue-jsx 先附上代码效果 npm i vitejs/plugin-vue-jsx -D 注意:vite的版本不同请安装不同版本的 /plugin-vue-jsx 我创建项目的vite版本是 4.3.9 所以我就按照了 3.0.2版本的vitejs/plugin-vue-jsx 安装完后需要在 vite.con…

牛客刷题之JZ31.栈的压入、弹出序列(C++)

1.题目解析 本题给出两个序列,判断一个序列压入栈后的弹出序列是否有可能成为另一个序列,核心难度就是如何判断能否满足弹出序列 2.算法原理 这里的算法思路是讲压入栈的序列模拟弹出,即将压入的序列与弹出的序列对比,相同则将压入…

7、关于LoFTR

7、关于LoFTR LoFTR论文链接:LoFTR LoFTR的提出,是将Transformer模型的注意力机制在特征匹配方向的应用,Transformer的提取特征的机制,在自身进行,本文提出可以的两张图像之间进行特征计算,非常适合进行特…

GAMES101(5~6节,光栅化)

光栅化Rasterization 透视投影已知field和近平面,如何推导宽度? 根据三角函数:tan field / 2 (height / 2) / ||n||近平面,从而可以求出高度 因为知道宽高比,所以可以求出宽度,高度 * 宽/高 视口变换 …

Vulkan描述符、描述符Pool、Layout概念

1、DescriptorSetLayout为了组织和管理着色器资源(如缓冲区、纹理、采样器等),多个相同类型的Descriptor放在一个Layout中以优化GPU对资源的访问 //DescriptorSetLayout定义了哪些描述符Descriptor类型(Buffers、Textures、Sample…

四、搭建网站服务器超详细步骤——解决宝塔界面无法登录问题

前言 本篇博客是搭建网站服务器的第四期,也到了中间的一节 先分享一下我在搭建网站时的个人感受,我在这个环节卡住了很久 后来突然醒悟了,然后成功进入了宝塔界面 现在就来分享一下,我所遇到的问题 小伙伴们坐好了 …

LINUX和Windows提权前信息收集的两种方式

信息收集分为两种方式: 手动收集、自动收集; 手动枚举一个系统非常耗时,然而这种方法允许更多的控制,并可以帮助识别自动化工具经常遗漏的更奇特的提权提升方式; 一、手动收集 1、枚举用户 Windows whoami …

【C++】手动实现nique_ptr智能指针

1、自己实现封装了一个智能指针&#xff0c;并且使用了模板 目录 代码实现&#xff1a; 输出结果如下&#xff1a; 代码实现&#xff1a; #include <iostream>using namespace std;template <typename T> class UniquePtr { private:T *ptr;public://默认构造函…

【2024数学建模国赛赛题思路】C题第四套思路已出丨仅供参考

问题一思路分析 假定各种农作物未来的预期销售量、种植成本、亩产量和销售价格相对于2023年保持稳定&#xff0c;每季种植的农作物在当季销售。如果某种作物每季的总产量超过相应的预期销售量&#xff0c;超过部分不能正常销售。请针对以下两种情况&#xff0c;分别给出该乡村…

语法分析例题

答案&#xff1a;A 选项B&#xff0c;选项C&#xff0c;选项D都只有在程序运行后才能看出来是否正确 答案&#xff1a;D 自己写一个C程序&#xff0c;未赋值&#xff0c;就可以看出可以运行&#xff0c;但结果是乱码 #include<stdio.h>int main() {int a;int b;b10;bb…

图形推理-错题集

001 解析&#xff1a; 002 解析&#xff1a; 003 解析&#xff1a; 004 005 006

day09-IO-字符流其它流

一、字符流 字符流&#xff08;只能做文本文件的处理&#xff09;字符输入流 Reader--FileReader字符输出流 Writer--FileWriter ​ 使用文件字符输入流的好处&#xff1a;读取中文不会出现乱码问题 1.1 字符输入流 构造器说明public FileReader (File file)创建字符输入流管道…