二十一、【用户管理与权限 - 篇三】角色管理:前端角色列表与 CRUD 实现

【用户管理与权限 - 篇三】角色管理:前端角色列表与 CRUD 实现

    • 前言
      • 准备工作
      • 第一部分:更新 API 服务以包含角色管理
      • 第二部分:添加角色管理页面的路由和侧边栏入口
      • 第三部分:实现角色列表页面
      • 第四部分:实现角色表单对话框组件
      • 第五部分:全面测试
    • 总结

前言

一个完善的权限系统离不开对角色的有效管理。管理员需要能够方便地查看、创建、编辑和删除系统中的角色,以便后续为这些角色分配权限,并将角色赋予用户。

本文将实现以下前端功能:

  1. 角色列表页面: 创建一个新的前端页面,用于展示所有角色。此列表不分页(因为角色数量通常不会非常庞大),但支持按角色名称或描述进行搜索
  2. 角色表单对话框: 实现一个可复用的表单对话框组件,用于创建新角色和编辑现有角色的基本信息(名称、描述)。
  3. CRUD 操作联调: 将角色的创建、读取、更新、删除操作与后端 /api/roles/ API 进行完整的联调。
  4. API 与类型整合: 角色相关的 API 调用函数和 TypeScript 类型定义将整合到现有的 src/api/user.ts 文件中,因为角色与用户管理紧密相关。

准备工作

  1. 前端项目就绪: test-platform/frontend 项目可以正常运行 (npm run dev)。
  2. 后端 API 运行中: Django 后端服务运行,/api/roles/ API 端点已按照《篇一》中的设计实现并可用。
  3. JWT 认证可用: 管理员身份登录。
  4. Axios 和 API 服务已封装: utils/request.ts 已配置。
  5. src/api/user.ts 文件已存在。

第一部分:更新 API 服务以包含角色管理

我们将在现有的 user.ts 文件中添加角色相关的类型定义和 API 调用函数。

打开 frontend/src/api/user.ts,在文件末尾添加以下内容:
在这里插入图片描述

// test-platform/frontend/src/api/user.ts
// ... (已有的 User 相关类型和 API 函数保持不变) ...// --- 角色相关类型和 API ---
export interface Role {id: number;name: string;description: string | null;create_time?: string; update_time?: string; // permissions?: any[]; // 权限字段将在后续权限篇添加
}export type RoleListResponse = Role[] // 获取所有角色列表 (用于下拉选择)
export function getAllRoles(): AxiosPromise<RoleListResponse> {return request({url: '/roles/',method: 'get',params: { page_size: 1000 }})
}// 创建或更新角色时发送的数据类型
export interface UpsertRoleData {name: string;description?: string | null;
}// 1. 获取角色列表 (支持搜索,不分页)
export function getRoleList(params?: { search?: string }): AxiosPromise<RoleListResponse> {return request({url: '/roles/',method: 'get',params // params: { search: 'keyword' }})
}// 2. 创建角色
export function createRole(data: UpsertRoleData): AxiosPromise<Role> {return request({url: '/roles/',method: 'post',data})
}

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

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

相关文章

Objective-c protocol 练习

题目描述&#xff1a; 请使用 Objective-C 中的 protocol 协议机制&#xff0c;实现一个简易的门禁控制系统。 系统包含两个类&#xff1a; AccessControlSystem —— 门禁系统&#xff0c;用于执行开门操作&#xff1b;Admin —— 实现权限判断逻辑的管理员。 要求如下&am…

科技创新赋能产业创新,双轮驱动助力新疆高质量发展!

在新疆维吾尔自治区成立70周年之际&#xff0c;中国产学研合作促进会于6月14日在乌鲁木齐举办“天山对话&#xff1a;推动新疆科技创新与产业创新”盛会。多位院士、专家、学者及企业代表齐聚一堂&#xff0c;探寻推动新疆科技创新和产业创新的新路径、新动能。活动现场&#x…

C#最佳实践:推荐使用 nameof 而非硬编码名称

C#最佳实践:推荐使用 nameof 而非硬编码名称 在 C# 编程领域,代码的可维护性、健壮性和可读性是衡量程序质量的重要指标。在日常开发中,我们常常会遇到需要引用类型、成员或变量名称的场景,比如在抛出异常时指定错误相关的变量名、在日志记录中标记关键元素名称等。传统的…

vue3 iframe 跨域-通讯

一、基础嵌套方法 直接在 HTML 中使用 <iframe> 标签指定 src 属性&#xff1a; <iframe src"https://目标网址.com" width"800" height"600"></iframe>‌限制‌&#xff1a;若目标网站设置了 X-Frame-Options 响应头&#x…

Iceberg与Hive集成深度

一、Iceberg在Hive中的ACID事务实现与实战 1.1 传统Hive的事务局限性 Hive原生仅支持非事务表&#xff08;Non-ACID&#xff09;&#xff0c;存在以下痛点&#xff1a; 不支持行级更新/删除并发写入时数据一致性无法保证无事务回滚机制历史版本查询需手动实现 1.2 Iceberg为…

深入剖析 Celery:分布式异步任务处理的利器

本文在创作过程中借助 AI 工具辅助资料整理与内容优化。图片来源网络。 文章目录 引言一、Celery 概述1.1 Celery 的定义和作用1.2 Celery 的应用场景 二、Celery 架构分析2.1 Celery 的整体架构2.2 消息中间件&#xff08;Broker&#xff09;2.3 任务队列&#xff08;Task Que…

Flask应用中处理异步事件(后台线程+事件循环)的方法(2)

在上一节&#xff0c;我们讲述了最简单最基础的后线程的建立&#xff0c;现在我们将进行拓展 Flask应用中处理异步事件&#xff08;后台线程事件循环&#xff09;的方法&#xff08;1&#xff09; 在我们的实际应用当中&#xff0c;我们需要定义三个东西 一个多线程的信号旗&am…

C++(面向对象编程)

思维导图 面向对象 1.面向对象思想 概念&#xff1a;面向对象编程&#xff08;OOP&#xff09;是一种以对象为基础的编程范式&#xff0c;强调将数据和操作数据的方法封装在一起。这就是上篇文章讲过的。面向过程是以“怎么解决问题”为核心&#xff0c;而面向对象思想在于“谁…

驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接,

驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接,Error: “The server selected protocol version TLS10 is not accepted by client preferences [TLS13&#xff0c;TLS12]”. ClientConnectionId:d5fd8d69-ae88-4055-9f6d-6e8515224ce2】。 基本上就是…

【三大前端语言之一】交互:JavaScript详解

【三大前端语言之一】交互&#xff1a;JavaScript详解 在学习完HTML和CSS之后&#xff0c;最后一门前端语言——JavaScript&#xff0c;是重中之重。HTML负责页面结构&#xff0c;CSS负责页面样式&#xff0c;而JavaScript则赋予网页“生命”&#xff0c;让网页可以动起来、响…

LangChain面试内容整理-知识点12:检索器(Retriever)接口与实现

在LangChain中,检索器(Retriever)是一个抽象接口,负责根据用户查询从数据源中检索相关文档。可以把Retriever理解为“搜索工具”:给它一个未经结构化的查询文本(如用户问题),它返回一组与之相关的 Document 对象。内部可以基于向量相似度、数据库查询、甚至网络搜索。 …

LLVM前端和优化层

文章目录 LLVM ArchitectueLLVM 前端Lexical Analysis词法分析Syntactic analysis 语法分析Syntactic Analyze语义分析 LLVM 优化层Pass 基础概念Pass 依赖关系Pass API 总结 LLVM Architectue LLVM 前端 LLVM 的前端其实是把源代码也就是 C、C、Python 这些高级语言变为编译器…

工作流和Agent 的区别与联系

工作流和智能体可能让人混淆的地方就是他们都可能有大模型的加持&#xff0c;都可能有工具的加入供大模型调用&#xff0c;本文做一下对比和联系 工作流 (Workflow) 定义&#xff1a; 工作流是一系列预定义、结构化且可重复的步骤或任务&#xff0c;旨在完成特定的业务目标或解…

leetcode--用StringBulider反转字符串单词的巧妙解法

反转字符串中的单词 这道题理想中的操作方式就是先去除前导和尾随空格&#xff0c;之后设一个尾指针&#xff0c;往前检索&#xff0c;扫到一个单词就把这个单词放到字符串的第一个位置。 很明显&#xff0c;java中我们不能直接对字符串进行修改&#xff0c;而我们想实现一个一…

连锁零售行业智慧能源管理解决方案:精准管控,让每一度电创造价值

在连锁超市、便利店等业态中&#xff0c;门店分布广、用能场景复杂、管理成本高是普遍难题。传统能源管理模式依赖人工抄表与分散管理&#xff0c;存在数据滞后、响应效率低、安全隐患难排查等问题。以某全国几千家门店的连锁便利店为例&#xff0c;其面临的挑战包括&#xff1…

在 PostgreSQL 中实现 `lck`, `special`, `item` 与 `org_id` 或 `user_id` 组合唯一的约束

在 PostgreSQL 中实现 lck, special, item 与 org_id 或 user_id 组合唯一的约束 要实现 lck, special, item 这三个字段必须与 org_id 或 user_id 中的一个&#xff08;但不能同时&#xff09;组合唯一的约束&#xff0c;你需要创建以下约束&#xff1a; 方案1&#xff1a;使…

g++ a.cpp -o a ‘pkg-config --cflags --libs opencv4‘/usr/bin/ld: 找不到 没有那个文件或目录

这个错误表明 pkg-config 命令没有正确执行&#xff0c;导致编译器无法找到 OpenCV 的库文件和头文件路径。pkg-config 是一个工具&#xff0c;用于查询已安装库的编译和链接选项。如果 pkg-config 无法找到 OpenCV 的配置文件&#xff0c;就会导致这个错误。 以下是解决这个问…

定制平板在智能家居中能做些什么?全面解析其核心功能

大家有没有发现&#xff0c;现在智能家居越来越普及了&#xff0c;很多家庭都在逐步升级自己的居住体验。而在这一过程中&#xff0c;一种设备正悄悄地取代我们以前常用的开关面板和手机APP&#xff0c;成为整个家庭智能控制的核心&#xff0c;这就是——定制平板。 它可不是我…

【通俗易懂】Linux 线程调度策略详解

引言&#xff1a;CPU是厨房&#xff0c;调度器是主厨 要真正理解Linux如何处理成千上万个并发任务&#xff0c;不妨把它想象成一个繁忙的专业厨房。这个比喻不仅能让抽象概念变得具体&#xff0c;更能揭示其背后深刻的设计哲学。 厨房 (The Kitchen): 代表整个计算机系统。 厨…

笔记本电脑安装win10哪个版本好_笔记本装win10专业版图文教程

笔记本电脑安装win10哪个版本好&#xff1f;笔记本还是建议安装win10专业版。Win分为多个版本&#xff0c;其中家庭版&#xff08;Home&#xff09;和专业版&#xff08;Pro&#xff09;是用户选择最多的两个版本。win10专业版在功能以及安全性方面有着明显的优势&#xff0c;所…