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

ops/2024/11/14 4:21:55/

新增接口

python">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列表相同。

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

有两种方案可以搞定:

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

代码实现

python">import unittest
import reqclass 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"))# 拿到这个角色的IDtarget_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 = Nonefor role in data:if role.get("name") == role_name:role_id = role.get("id")breakself.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_idresp = 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_idresp = 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.ppmy.cn/ops/47668.html

相关文章

区块链游戏(链游)安全防御:抵御攻击的策略与实践

一、引言 区块链游戏,或称为链游,近年来随着区块链技术的普及而迅速崛起。然而,如同其他任何在线平台一样,链游也面临着各种安全威胁。本文将探讨链游可能遭遇的攻击类型以及如何通过有效的策略和技术手段进行防御。 二、链游可…

Docker - Kafka

博文目录 文章目录 说明命令 说明 Docker Hub - bitnami/kafka Docker Hub - apache/kafka Kafka QuickStart Kafka 目前没有 Docker 官方镜像, 目前拉取次数最多的是 bitnami/kafka, Apache 提供的是 apache/kafka (更新最及时), 本文使用 bitnami/kafka bitnami/kafka 镜像…

面试题------>MySQL!!!

一、连接查询 ①:左连接left join (小表在左,大表在右) ②:右连接right join(小表在右,大表在左) 二、聚合函数 SQL 中提供的聚合函数可以用来统计、求和、求最值等等 COUNT&…

solus linux 简介

Solus Linux 是一个独立的 Linux 发行版,它具有以下几个显著的优势: 1. **独立性**:Solus Linux 不基于任何其他 Linux 系统,它是从零开始独立构建的,拥有自己的软件仓库和包管理系统。 2. **简洁现代的设计**&#…

统一响应,自定义校验器,自定义异常,统一异常处理器

文章目录 1.基本准备(构建一个SpringBoot模块)1.在A_universal_solution模块下创建新的子模块unified-processing2.pom.xml引入基本依赖3.编写springboot启动类4.启动测试 2.统一响应处理1.首先定义一个响应枚举类 RespBeanEnum.java 每个枚举对象都有co…

[论文笔记]Mistral 7B

引言 今天带来大名鼎鼎的Mistral 7B的论文笔记。 作者推出了Mistral 7B,这是一个70亿参数的语言模型。Mistral 7B在所有评估基准中表现优于最佳的13B开源模型(Llama 2),并且在推理、数学和代码生成方面胜过最佳发布的34B模型(Ll…

创新入门|营销中的视频内容:不可或缺的策略

视频在营销中日益重要。你是否也发现,视频内容最近似乎无处不在?它占据着社交媒体的推文、网站首页,甚至电子邮件中的位置。事实上,并不是你一个人有这样的感受。在过去十年中,视频作为一种营销手段日益成熟和强大。这是因为,人类天生就是视觉动物。我们大脑处理视觉信息的速度…

【Kotlin 二】函数/高阶函数/内联函数 对象/主构造函数/次要构造函数/对象初始化

1.函数 函数声明如下: fun 函数名称([函数参数...]): 返回值类型{// 方法体 }fun sum(num1: Int, num2: Int): Int {return num1 num2 }注意:Kotlin函数返回值为空时为Unit,并非常见的void 函数可以设置默认值: fun printNum…