zdppy_amauth 实现给角色批量绑定权限

news2025/1/15 6:31:09

新增接口

api.resp.post("/auth/role_auth", amauth.role.add_auths)

如何测试

如何测试能不能给指定的角色批量的添加权限呢?

  • 1、需要新建一个角色
  • 2、需要拿到这个角色的ID
  • 3、需要新增三个权限
  • 4、需要拿到新增的三个权限的ID
  • 5、拿着角色ID和权限ID列表,调用批量新增角色接口进行测试
  • 6、校验测试结果
  • 7、调用根据角色ID批量获取权限的接口
  • 8、校验查询结果是否符合预期

测试流程分析

需要新建一个角色

调用 POST:/auth/role 新增角色

需要拿到这个角色的ID

调用 GET:/auth/role 拿到所有的角色,然后根据角色名筛选ID。

需要新增三个权限

调用 POST:/auth/auth 新增三个权限。

需要拿到新增的三个权限的ID

调用 GET:/auth/auth 根据权限名筛选ID。

拿着角色ID和权限ID列表,调用批量新增角色接口进行测试

调用 POST:/auth/role_auth 进行新增。

校验测试结果

status_cod = 200
data[“code”] = 10000
data[“status”] = True

调用根据角色ID批量获取权限的接口

调用 GET:/auth/role_auth/{id} 进行查询

校验查询结果是否符合预期

status_cod = 200
data[“code”] = 10000
data[“status”] = True

data里面有很多个对象,每个对象都有ID。将所有的ID取出来,必须和我们新增时的ID列表相同。

怎么判断两个列表的元素完全相同?

有两种方案可以搞定:

  • 比较排序后的两个列表是否相同
  • 取交集,如果交集的元素个数和原本的两个集合的元素个数都相同,说明两个集合本身就是相同的。
    在这里插入图片描述

代码实现

import unittest
import req


class TestRoleAuthAdd(unittest.TestCase):

    def test_add_role_auth(self):
        # 新建角色
        target_url = "http://127.0.0.1:8888/auth/role"
        role_name = "testrole"
        data = {
            "name": role_name,
            "nickname": role_name
        }
        resp = req.post(target_url, json=data)
        self.assertEqual(200, resp.status_code)
        data = resp.json()
        self.assertEqual(10000, data.get("code"))
        self.assertTrue(data.get("status"))

        # 拿到这个角色的ID
        target_url = "http://127.0.0.1:8888/auth/role"
        resp = req.get(target_url)
        self.assertEqual(200, resp.status_code)
        data = resp.json()
        self.assertEqual(10000, data.get("code"))
        self.assertTrue(data.get("status"))
        data = data.get("data")
        role_id = None
        for role in data:
            if role.get("name") == role_name:
                role_id = role.get("id")
                break
        self.assertIsNotNone(role_id)

        # 新增三个权限
        target_url = "http://127.0.0.1:8888/auth/auth"
        auth_name1 = "GET:/model"
        auth_name2 = "POST:/model"
        auth_name3 = "DELETE:/model"
        resp = req.post(target_url, json={"name": auth_name1, "nickname": auth_name1})
        self.assertEqual(200, resp.status_code)
        data = resp.json()
        self.assertEqual(10000, data.get("code"))
        self.assertTrue(data.get("status"))
        resp = req.post(target_url, json={"name": auth_name2, "nickname": auth_name2})
        self.assertEqual(200, resp.status_code)
        data = resp.json()
        self.assertEqual(10000, data.get("code"))
        self.assertTrue(data.get("status"))
        resp = req.post(target_url, json={"name": auth_name3, "nickname": auth_name3})
        self.assertEqual(200, resp.status_code)
        data = resp.json()
        self.assertEqual(10000, data.get("code"))
        self.assertTrue(data.get("status"))

        # 获取权限ID列表
        target_url = "http://127.0.0.1:8888/auth/auth"
        auth_ids = []
        resp = req.get(target_url)
        self.assertEqual(200, resp.status_code)
        data = resp.json()
        self.assertEqual(10000, data.get("code"))
        self.assertTrue(data.get("status"))
        data = data.get("data")
        for auth in data:
            if auth.get('name') in (auth_name1, auth_name2, auth_name3):
                auth_ids.append(auth.get("id"))
        self.assertEqual(3, len(auth_ids))

        # 核心:批量绑定
        target_url = "http://127.0.0.1:8888/auth/role_auth/" + role_id
        resp = req.post(target_url, json={"ids": auth_ids})
        self.assertEqual(200, resp.status_code)
        data = resp.json()
        self.assertEqual(10000, data.get("code"))
        self.assertTrue(data.get("status"))

        # 批量获取权限
        resp = req.get(target_url)
        self.assertEqual(200, resp.status_code)
        data = resp.json()
        self.assertEqual(10000, data.get("code"))
        self.assertTrue(data.get("status"))

        query_ids = []
        data = data.get("data")
        for auth in data:
            if auth.get('name') in (auth_name1, auth_name2, auth_name3):
                query_ids.append(auth.get("id"))
        self.assertEqual(3, len(auth_ids))

        auth_ids.sort()
        query_ids.sort()
        self.assertEqual(auth_ids, query_ids)

        # 删除权限
        target_url = "http://127.0.0.1:8888/auth/auth"
        resp = req.delete(target_url, json={"ids": auth_ids})
        self.assertEqual(200, resp.status_code)
        data = resp.json()
        self.assertEqual(10000, data.get("code"))
        self.assertTrue(data.get("status"))

        # 删除角色
        target_url = "http://127.0.0.1:8888/auth/role/" + role_id
        resp = req.delete(target_url)
        self.assertEqual(200, resp.status_code)
        data = resp.json()
        self.assertEqual(10000, data.get("code"))
        self.assertTrue(data.get("status"))

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

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

相关文章

11. RBAC权限管理从零到一实现(二)

前端页面已提交至git https://github.com/SJshenjian/cloud-web默认用户名密码admin 1

深度解析:ISP代理与住宅代理区别

代理充当用户和互联网之间的中介,提供各种功能以增强安全性、隐私性和可访问性。在众多代理类型中,ISP 和住宅代理脱颖而出,每种代理都具有独特的功能和应用。 了解 ISP 代理 代理ISP,通常称为互联网服务提供商代理,通…

在cmd菜单中使用自定义命令通过bat和powershell命令调用翻译API

先说一个血淋淋的结果,这个小功能其实在github已经有大佬帮我们封装好了,我也是自己刚倒腾好之后才发现的,所以如果只是需要这个功能的朋友可以直接移步这个项目:https://github.com/kenshinji/yddict,自己电脑安装一个…

HarmonyOS应用开发深度指南:从基础到高级实践

1. HarmonyOS开发概述 HarmonyOS是华为推出的分布式操作系统,旨在为不同设备提供统一的体验。它支持多种编程语言,包括ArkTS、JS、C/C++和Java。开发者需要了解HarmonyOS的分布式架构,包括Ability、Service、Data Ability等核心概念。 了解HarmonyOS的分布式架构:HarmonyO…

今时今日蜘蛛池还有用吗?

最近不知道哪里又开始刮起“蜘蛛池”这个风气了,售卖、购买蜘蛛池的行为又开始在新手站长圈里开始蔓延和流行了起来,乍一看到“蜘蛛池”这个词给明月的感受就是陌生,要经过回忆才能想起来一些残存的记忆,所谓的蜘蛛池说白了就是利…

废品回收小程序开发,助力商家拓展回收市场

随着互联网的快速发展,废品回收行业也走向了数字化发展,废品回收小程序成为了拓展市场的重要方式。在当下万亿元下的回收市场中,废品回收小程序的发展也能够发挥重要作用,提高市场回收效率,提高大众的回收意识&#xf…

Ubuntu 20.04 LTS配置JDK、Git

一、配置JDK 1.1 更新系统 执行以下命令 sudo apt update 出现以下界面即为安装成功 1.2 安装openjdk-11-jdk Ubuntu20.04中没有默认JDK,执行以下指令安装,默认会自动配置一些必要环境变量 sudo apt install openjdk-11-jdk 1.3 配置环境变量&…

MQTT.FX的使用

背景 在如今物联网的时代下,诞生了许多的物联网产品,这些产品通过BLE、WIFI、4G等各种各样的通信方式讲数据传输到各种各样的平台。 除了各个公司私有的云平台外,更多的初学者会接触到腾讯云、阿里云之类的平台。设备接入方式也有着多种多样…

大模型时代,是 Infra 的春天还是冬天?

Highlights 大模型时代元年感悟 Scaling Laws 是大模型时代的摩尔定律,是最值得研究的方向 LLM 发展的三个阶段: 算法瓶颈 -> 数据瓶颈 -> Infra 瓶颈 为什么 GPT 一枝独秀, BERT、T5 日落西山? 大模型时代,是大部分 Infra 人的冬天,少部分 Infra 人的春天(算法研…

网工内推 | 联通公司,云计算售前,AWS认证优先

01 联通数字科技有限公司 🔷招聘岗位:云计算售前工程师 🔷职责描述: 1.了解私有云,公有云,混合云等云计算技术知识,了解云计算行业现状及发展趋势。 2.承担区域项目售前工作支持,为…

Glide支持通过url加载本地图标

序言 glide可以在load的时候传入一个资源id来加载本地图标,但是在开发过程中。还得区分数据类型来分别处理。这样的使用成本比较大。希望通过自定义ModelLoader实现通过自定义的url来加载Drawab。降低使用成本 实现 一共四个类 类名作用GlideIcon通过自定义url的…

【保姆级讲解Outlook邮箱的使用技巧】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

海南聚广众达电子商务咨询有限公司靠谱吗?

在数字经济的浪潮中,抖音电商作为新兴业态,正以其独特的魅力和强大的势能,改变着传统商业模式,引领着新一轮的消费潮流。海南聚广众达电子商务咨询有限公司,作为抖音电商服务领域的佼佼者,凭借其专业的团队…

三十六、openlayers官网示例Earthquake Clusters解析——在聚合图层鼠标触摸显示五角星

官网demo地址: Earthquake Clusters 这篇展示了鼠标触摸聚合图层点位显示五角星的效果。 首先是初始化地图,加载了一个KML格式的矢量数据源,extractStyles为false表示不从kml数据源中提取样式。使用Select添加了鼠标选中的交互事件 vector …

postman教程-14-生成随机数

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了Postman关联接口的调用方法,本小节我们讲解一下Postman生成随机数的方法。 在接口测试中,经常需要向接口发送不同的输入数据,以确保接口的健壮性和可靠性。…

游戏缺失xinput1_3.dll怎么修复,总结几种有效的修复方法

在现代科技日新月异的时代,电脑已经成为我们生活和工作中不可或缺的工具。然而,由于各种原因,电脑可能会出现一些错误或问题,其中之一就是找不到xinput13.dll文件,这个问题会导致软件或者游戏无法正常启动运行&#xf…

如何解决 Zabbix模板同步超时:解决运维技术领域的BugFailed to sync Zabbix template due to timeout

如何解决 Zabbix模板同步超时:解决运维技术领域的BugFailed to sync Zabbix template due to timeout 原创作者: 猫头虎 作者微信号: Libin9iOak 作者公众号: 猫头虎技术团队 更新日期: 2024年6月6日 博主猫头虎…

【网络安全技术】——期末复习(冲刺篇)

📖 前言:快考试了,做篇期末总结,都是重点与必考点。 题型:材料分析题、简答题、看图分析题 课本: 目录 🕒 1. 计算机网络安全概述🕘 1.1 安全目标🕘 1.2 常见的网络安全…

uniapp小程序开发 | 从零实现一款影视类app (后台接口实现,go-zero微服务的使用)

uniapp小程序开发实战系列,完整介绍从零实现一款影视类小程序。包含小程序前端和后台接口的全部完整实现。系列连载中,喜欢的可以点击收藏。 该篇着重介绍获取轮播图后台接口和获取正在热映电影的两个后台接口的实现。 后台服务使用golang,…

大模型Prompt-Tuning技术进阶

LLM的Prompt-Tuning主流方法 面向超大规模模型的Prompt-Tuning 近两年来,随之Prompt-Tuning技术的发展,有诸多工作发现,对于超过10亿参数量的模型来说,Prompt-Tuning所带来的增益远远高于标准的Fine-tuning,小样本甚至…