若依权限设计与自定义新增用户

news2025/1/8 2:12:48

image-20241007090535109

前言

  • 若依 系统的权限设计是基于RBAC(Role-Based Access Control),即基于角色的访问控制模型,允许通过角色来管理用户的权限。

    • 每个用户可以分配一个或多个角色。用户的权限来自于其所分配的角色。用户与角色的对应关系保存在 sys_user_role 表中。
    • 每个角色可以分配不同的菜单权限,这些菜单包括页面的访问权限和按钮的操作权限。菜单的层级结构在 sys_menu 表中维护,通过 sys_role_menu 表将角色与菜单关联。这样就实现了某个角色可以访问某些页面或操作某些功能。
    • 因此,实现了通过角色来管理用户权限
  • 本篇博客,将介绍如何在若依中写一个新增用户方法,来帮助你更好的改造若依系统

主要表结构

  • sys_user:用户表,存储系统中的用户信息。
  • sys_role:角色表,存储系统中的角色信息。
  • sys_menu:菜单表,存储系统的菜单和按钮信息(菜单和按钮权限统一通过该表管理)。
  • sys_role_menu:角色与菜单关联表,存储角色与菜单权限之间的关系。
  • sys_user_role:用户与角色关联表,存储用户与角色的对应关系。
  • sys_dept:部门表,用于部门和数据权限的关联。
  • sys_role_dept:角色与部门关联表,用于角色与部门数据权限的绑定。

代码分析与实现

  • 想要自己写一个新增用户的代码,那基本就是先写一个接口,将接口暴露出去,允许访问的时候不需要通过系统校验。然后实现具体的新增。

image-20241007090250185

  • 接口暴露通过SecurityConfig,在src/main/java/com/ruoyi/framework/config/SecurityConfig.java。

基本用户新增

image-20241007082546764

  • 原本控制层代码在src/main/java/com/ruoyi/web/controller/system/SysUserController.java中,第120行的位置
  • 而具体实现代码在src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java中,第254行的位置

image-20241007082745217

  • 可以看到,新增用户这个动作不是一次性完成的,而是分为三步来走
    • 第一步,将用户信息写入sys_user表
    • 第二步,将用户和岗位的关联写入sys_user_post表、
    • 第三步,将用户信息和权限的关联写入 sys_user_role
  • 一般情况下,部门信息阿,用户角色信息阿使用的都是默认的,因此,可以在control层就设置好部门与用户角色信息的值(需要先在后台添加好)
    • 下面代码只是给了设置部门信息和用户角色信息,具体代码要需要你设置用户信息的值
       // 设置部门信息
        SysDept sysDept = new SysDept();
        user.setDeptId(103L);
        user.setDept(sysDept);
        // 设置用户角色
        Long[] roleIds = new Long[]{100L};
        user.setRoleIds(roleIds);

创建令牌

  • 创建完用户后,需要根据用户创建jwt令牌

image-20241007085117781

  • 若依的JWT令牌在src/main/java/com/ruoyi/framework/web/service/TokenService.java中,想要使用该工具类生成令牌,需要一个LoginUser对象,该对象在 src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java

image-20241007085438096

  • 使用该对象时,设置user值即可。user就是用户信息表
    • 下面代码只给了设置用户参数与生成令牌,具体的用户信息还需要你自己设置
            userService.newInsertUser(user);
            // 创建 LoginUser 并设置用户参数
            LoginUser loginUser = new LoginUser();
            loginUser.setUser(user);
            // 生成令牌
            String token = tokenService.createToken(loginUser);
   import com.qiuner.fxxyt.system.service.ISysUserService;

    @Autowired
    private ISysUserService userService;
    
    
    
SysUser user = new SysUser();
//TODO 记得设置用户必填字段的值
// 设置部门信息
SysDept sysDept = new SysDept();
user.setDeptId(103L);
user.setDept(sysDept);
// 设置用户角色
Long[] roleIds = new Long[]{100L};
user.setRoleIds(roleIds);

// 插入用户(插入代码很简单,直接正常写表插入语句就好了)
userService.MyInsertUser(user);

userService.newInsertUser(user);
// 创建 LoginUser 并设置用户参数
LoginUser loginUser = new LoginUser();
loginUser.setUser(user);
// 生成令牌
String token = tokenService.createToken(loginUser);
  • 经过以上步骤就可以创建完整用户了,具体的代码可以自己仔细看下所提到的源码对照着写

img

你好,我是Qiuner. 为帮助别人少走弯路而写博客 这是我的 github https://github.com/Qiuner⭐ gitee https://gitee.com/Qiuner 🌹

如果本篇文章帮到了你 不妨点个吧~ 我会很高兴的 😄 (^ ~ ^) 。想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎。

代码都在github或gitee上,如有需要可以去上面自行下载。记得给我点星星哦😍

如果你遇到了问题,自己没法解决,可以去我掘金评论区问。私信看不完,CSDN评论区可能会漏看 掘金账号 https://juejin.cn/user/1942157160101860 掘金账号

更多专栏:
  • 📊 一图读懂系列

  • 📝 一文读懂系列

  • ⚽ Uniapp

  • 🌟 持续更新

  • 🤩 Vue项目实战

  • 🚀 JavaWeb

  • 🎨 设计模式

  • 📡 计算机网络

  • 🎯 人生经验

  • 🔍 软件测试

掘金账号 CSDN账号

感谢订阅专栏 三连文章

7160101860) CSDN账号

感谢订阅专栏 三连文章

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

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

相关文章

llama3中文版微调

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&am…

数据结构--List的介绍

目录 1. 什么是List Collection中有那些方法? add(E e)方法 addAll(Collection c)方法 clear()方法 contains(Object o)方法 containsAll(Collection c)方法 equals(Object o)方法 hashCode()方法 isEmpty()方法 iterator()方法 remove(Object o)方法 …

[OS] 编译 Linux 内核

编译 Linux 内核:详细教程与 Kthreads 入门结合 我们将学习如何编译 Linux 内核,同时结合 Kthreads 的知识来理解各个步骤的目的。对于虚拟环境下的开发环境配置,本文将为你提供逐步指导。 1. 下载内核源代码 首先,我们需要从官…

数据结构——栈与队列的实现(全码)

一 栈的概念 栈是一种特殊的线性表,栈内数据遵循先进后出(LIFO)的原则,对于栈,只能在同一侧进行入栈和出栈操作。 入栈操作和出栈操作是在栈的同一侧进行的,如图示: 对于栈这种数据类型,我们可以采用链表或…

自动驾驶系列—揭秘毫米波雷达:自动驾驶的眼睛如何看穿复杂环境?

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

Linux:无法为立即文档创建临时文件: 设备上没有空间

虚拟机磁盘空间不足解决记录 1、问题描述2、问题解决 1、问题描述 在命令行输入命令按Tab键时出现如下报错: 很明显,设备上没有空间,即磁盘空间不足。通过命令查看具体情况如下: df -h2、问题解决 首先想到的是虚拟机扩容。关机虚…

【技术白皮书】内功心法 | 第一部分 | 数据结构与算法基础(数据结构)

数据结构与算法基础 内容简介数据结构数据模型数据结构的表现形式 基本概念数据(Data)数据元素(data element)数据结构的定义物理结构和逻辑结构逻辑结构逻辑结构表现形式二元组模型集合结构模型线性结构模型树结构模型图结构模型…

Python从0到100(六十):机器学习-模型选择与交叉验证

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能…

有限差分方法 - 拉普拉斯算子第二部分

Finite difference method - Laplacian part 2 — ROCm Blogs (amd.com) 2023年1月4日 作者:Justin Chang, Rajat Arora, Thomas Gibson, Sean Miller, Ossian O’Reilly 在之前的拉普拉斯算子文章中,我们开发了一种基于HIP实现的有限差分模板代码&#…

springboot车位预约小程序-计算机毕业设计源码42655

摘要 随着社会发展和人口增加,城市交通压力越来越大,停车位资源的分配和管理成为一个重要问题。传统的停车位和车位预约管理方式存在信息不对称、效率低下等问题,给用户带来不便。而基于微信小程序的车位预约系统可以通过智能化、数字化、便…

布尔莎公式推导

问题的提出 原始的围绕x轴、y轴、z轴进行旋转矩阵的公式为 但是最近需要将船体坐标系转换到相应的世界坐标系之中,在查看相关论文时,看到一个三维点公式转换模型 这里的旋转矩阵为,和我之前见到的旋转矩阵是不一样的。我一开始先是看到的202…

计算机网络-------重传、TCP流量控制、拥塞控制

重传、滑动窗口、流量控制、拥塞避免 重传机制 超时重传 发送方在发送数据时会启动一个定时器,当超过指定的时间之后,还没接收到接收方的ACK确认应答报文,就会重传该数据 快重传 当发送方收到接收方三个连续的ack之后说明发送方发送的报…

蓝牙模块(BT04/HC05)

目录 一、介绍 二、模块原理 1.原理图与外形尺寸 2.引脚描述 3.蓝牙模块基础AT指令介绍 三、程序设计 usart3.h文件 usart3.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 BT04A是一款蓝牙低功耗(Bluetooth Low Energy, BLE)模块&…

华为OD机试 - 奖牌榜排名(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

Python面向对象编程:属性和方法②

文章目录 一、什么是属性和方法1.1 属性1.2 方法 二、定义和使用属性2.1 定义实例属性2.2 访问和修改实例属性2.3 定义类属性2.4 访问和修改类属性 三、定义和使用方法3.1 定义实例方法3.2 调用实例方法3.3 定义类方法3.4 调用类方法3.5 定义静态方法3.6 调用静态方法 四、综合…

ChatGPT背景下,高职人工智能技术应用专业的人才培养

一、引言 ChatGPT,即聊天生成预训练变换器,由美国OpenAI公司开发,自2022年11月首次亮相以来,已成为人工智能领域的一个标志性成就。这款聊天机器人利用先进的人工智能技术,处理自然语言,能够精准把握用户的…

【实战教程】SpringBoot全面指南:快速上手到项目实战(SpringBoot)

文章目录 【实战教程】SpringBoot全面指南:快速上手到项目实战(SpringBoot)1. SpringBoot介绍1.1 SpringBoot简介1.2系统要求1.3 SpringBoot和SpringMVC区别1.4 SpringBoot和SpringCloud区别 2.快速入门3. Web开发3.1 静态资源访问3.2 渲染Web页面3.3 YML与Properti…

ctf.bugku - 本地管理员

题目来源:本地管理员 - Bugku CTF 访问页面 页面的最后返回一个字符串; 结尾 应该是base64 编码; 解码得到 test123 同时,提示信息还有 IP禁止访问,本地管理员登陆; 所以,请求头添加&#x…

“欢迎”相关英语表达柯桥成人商务英语口语学习到蓝天广场

1.某地的欢迎标语 说到欢迎,小编想起了江苏的欢迎标语。 这则标语把“江苏欢迎您”,翻译成了“Jiangsu welcomes you”。 不少小伙伴都觉得这样翻译不对,“欢迎您来某某地方”,应该翻译成“Welcome to XX”。 但其实,一…

超声波气象监测站的工作原理

TH-CQX5超声波气象监测站,顾名思义,是一种通过超声波技术实现气象数据监测的设备。这种监测站的设计理念充分利用了超声波在空气中传播的特性,能够高效、准确地测量风速、风向、温度、湿度等气象要素。超声波气象监测站的构造简洁而高效&…