当前位置: 首页 > news >正文

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

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;@Autowiredprivate 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.mrgr.cn/news/44401.html

相关文章:

  • 数据分析之Spark框架介绍
  • VMware Tanzu Kubernetes Grid Integrated Edition 1.20 发布下载,新增功能概览
  • JS中浅拷贝和深拷贝的区别
  • 解锁数字化营销成功密码
  • 美客多测评系统:批量注册买家号的新利器
  • 【C++ Primer Plus】4
  • T-Sql_while循环语句
  • Linux之实战命令27:apropos应用实例(六十一)
  • [C++]使用onnxruntime部署yolov8-cls图像分类onnx模型
  • Unsloth 大模型微调工具简明教程
  • 分词的艺术:为AI拆解文本
  • 课堂点名系统小程序的设计
  • 问:说说JRE、JDK、JVM 及 JIT都是干嘛的?
  • Apache Ranger 70道面试题及参考答案
  • 基于Python的人工智能应用案例系列(19):SpaCy评论情感极性分类
  • SumatraPDF一打开就无响应怎么办?
  • 信息学奥赛一本通 2100:【23CSPJ普及组】一元二次方程(uqe) | 洛谷 P9750 [CSP-J 2023] 一元二次方程
  • Ajax面试题:(第一天)
  • 分享股票期货高频数据获取以及我的策略
  • 【Canvas与色彩】十六等分多彩隔断圆环