测试平台系列(24) 编写成员管理功能

简介: 编写成员管理功能

回顾


上一节我们编写了项目设置相关功能,还剩下2个tab没有编写,分别是: 用例列表成员管理.

编写成员列表及部分接口


  • 添加成员
  • 搜索成员
  • 编辑成员
  • 删除成员
    今天因为时间关系就不展示删除成员了,只编写编辑/新增成员接口和页面。

编写新增/编辑角色的方法

由于之前我们已经编辑新增角色的方法了,但是需要修改一点:

1.jpg

image

这里角色的筛选条件不能加上,为什么呢?因为加上的话,我可以创建同一个user_id的不同角色,比如一个组长一个组员。所以我们只要user_id在数据表里出现过,就视为重复添加

  • 新增编辑方法
    编辑方法流程会比较多,首先我们需要判断用户是否是超管,如不是,则判断他是不是owner,如果也不是,则判断他是不是组长,如果是则判断他要修改的用户是不是组长,用户是组长则不让他修改!


@staticmethod
    def update_project_role(role_id, project_role, user, user_role):
        try:
            role = ProjectRole.query.filter_by(id=role_id, deleted_at=None).first()
            if role is None:
                return "该用户角色不存在"
            if user_role != pity.config.get("ADMIN"):
                project = Project.query.filter_by(id=role.project_id).first()
                if project is None:
                    return "该项目不存在"
                if project.owner != user and role.project_role == 1:
                    # 说明既不是owner也不是超管,无法修改阻止的权限
                    return "不能修改其他组长的权限"
            updater_role = ProjectRole.query.filter_by(user_id=user, project_id=role.project_id, deleted_at=None).first()
            if updater_role is None or updater_role.project_role == 1:
                return "对不起,你没有权限"
            role.project_role = project_role
            role.updated_at = datetime.now()
            role.update_user = user
            db.session.commit()
        except Exception as e:
            ProjectRoleDao.log.error(f"修改项目用户失败, {e}")
            return f"修改项目用户失败, {e}"
        return None
  • 判断他要修改的角色id是否存在
  • 判断是否是超管或者owner
  • 判断要修改的是不是组长
  • 判断他自身是否是组长

这些校验都通过以后,才允许他修改组员的权限

补全具体的接口方法



@pr.route("/role/insert", methods=["POST"])
@permission()
def insert_project_role(user_info):
    try:
        data = request.get_json()
        if data.get("user_id") is None or data.get("project_role") is None or data.get("project_id") is None:
            return jsonify(dict(code=101, msg="请求参数有误"))
        err = ProjectRoleDao.add_project_role(data.get("user_id"), data.get("project_id"), data.get("project_role"),
                                              user_info["id"])
        if err is not None:
            return jsonify(dict(code=110, msg=err))
    except Exception as e:
        return jsonify(dict(code=110, msg=str(e)))
    return jsonify(dict(code=0, msg="操作成功"))
@pr.route("/role/update", methods=["POST"])
@permission()
def update_project_role(user_info):
    try:
        data = request.get_json()
        if data.get("user_id") is None or data.get("project_role") is None or data.get("project_id") is None \
                or data.get("id") is None:
            return jsonify(dict(code=101, msg="请求参数有误"))
        err = ProjectRoleDao.update_project_role(data.get("id"), data.get("project_role"),
                                                 user_info["id"], user_info["role"])
        if err is not None:
            return jsonify(dict(code=110, msg=err))
    except Exception as e:
        return jsonify(dict(code=110, msg=str(e)))
    return jsonify(dict(code=0, msg="操作成功"))

2段代码比较接近,基本就是校验参数+调用核心方法。

编写前端部分

  • 编写services部分: src/services/project.js

2.jpg

image

  • 编写ProjectRole.jsx组件

3.jpg

image

首先加载组件的时候获取user_id => user的映射,维护一个对话框,用来选择用户+用户角色。

  • onUpdateRole
    如果更新成功则重新加载数据。

4.jpg

image

  • onFinish
    新增角色信息
  • onConfirm
    用来删除角色,目前功能未完成。

5.jpg

image

  • permission这边其实是一个包装组件,当project_role是'OWNER'的时候,我们把它进行特殊显示:
  1. 不可编辑
  2. 特殊身份标识
  • 其他用户则返回一个选择框,通过选择他的角色而触发update方法。

6.jpg

image

7.jpg

image

fields是表单的2个字段: 用户和角色

8.jpg

image

注意这里: 我在roles前面强行塞了一个OWNER的数据,为的就是呼应之前针对project_role === 'OWNER'的情况。

9.jpg

image

这边就是添加成员的按钮和List列表。

最终效果


10.jpg

image

11.PNG

image


今天更的很仓促,到家比较晚。很多东西也说的不清不楚的,凑合看吧。下次哪怕一次性写不完也不强行更文了,不过有不懂的或者有建议的可以随时联系我呀!我知道很多读者不太熟悉React,我自己也没办法从最基础的地方交,所以可能在后面花点时间大致写一点点简单的教程。

相关文章
|
9天前
|
消息中间件 监控 小程序
电竞陪玩系统架构优化设计,陪玩app如何提升系统稳定性,陪玩小程序平台的测试与监控
电竞陪玩系统架构涵盖前端(React/Vue)、后端(Spring Boot/php)、数据库(MySQL/MongoDB)、实时通信(WebSocket)及其他组件(Redis、RabbitMQ、Nginx)。通过模块化设计、微服务架构和云计算技术优化,提升系统性能与可靠性。同时,加强全面测试、实时监控及故障管理,确保系统稳定运行。
|
3月前
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
239 56
|
1月前
|
监控 测试技术
slb测试会话保持功能
slb测试会话保持功能
56 6
|
2月前
|
人工智能 供应链 安全
AI辅助安全测试案例某电商-供应链平台平台安全漏洞
【11月更文挑战第13天】该案例介绍了一家电商供应链平台如何利用AI技术进行全面的安全测试,包括网络、应用和数据安全层面,发现了多个潜在漏洞,并采取了有效的修复措施,提升了平台的整体安全性。
|
2月前
|
监控 安全 测试技术
构建高效的精准测试平台:设计与实现指南
在软件开发过程中,精准测试是确保产品质量和性能的关键环节。一个精准的测试平台能够自动化测试流程,提高测试效率,缩短测试周期,并提供准确的测试结果。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
179 1
|
3月前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
92 2
|
2月前
|
监控 安全 测试技术
构建高效精准测试平台:设计与实现全攻略
在软件开发过程中,精准测试是确保产品质量的关键环节。一个高效、精准的测试平台能够自动化测试流程,提高测试覆盖率,缩短测试周期。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
86 0
|
3月前
|
测试技术
Appscan手工探索、手工测试功能实战
Appscan手工探索、手工测试功能实战
|
4月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
305 3
快速上手|HTTP 接口功能自动化测试
|
5月前
|
XML Web App开发 数据挖掘
Postman接口测试工具全解析:功能、脚本编写及优缺点探讨
文章详细分析了Postman接口测试工具的功能、脚本编写、使用场景以及优缺点,强调了其在接口自动化测试中的强大能力,同时指出了其在性能分析方面的不足,并建议根据项目需求和个人偏好选择合适的接口测试工具。
158 1

热门文章

最新文章