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

前言

  • 若依 系统的权限设计是基于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:角色与部门关联表,用于角色与部门数据权限的绑定。

代码分析与实现

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

基本用户新增

  • 原本控制层代码在src/main/java/com/ruoyi/web/controller/system/SysUserController.java中,第120行的位置
  • 而具体实现代码在src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java中,第254行的位置
  • 可以看到,新增用户这个动作不是一次性完成的,而是分为三步来走
    • 第一步,将用户信息写入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令牌
  • 若依的JWT令牌在src/main/java/com/ruoyi/framework/web/service/TokenService.java中,想要使用该工具类生成令牌,需要一个LoginUser对象,该对象在 src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java
  • 使用该对象时,设置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);

  • 经过以上步骤就可以创建完整用户了,具体的代码可以自己仔细看下所提到的源码对照着写

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

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

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

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

掘金账号 CSDN账号
感谢订阅专栏 三连文章

7160101860) CSDN账号

感谢订阅专栏 三连文章

相关推荐
代码代码快快显灵2 小时前
java之异常处理
java·开发语言
茶馆大橘2 小时前
Spring Validation —— 参数校验框架
java·后端·学习·spring
阿望要努力上研究生4 小时前
若依项目搭建(黑马经验)
java·redis·node.js·maven·管理系统
一只脑洞君4 小时前
Kubernetes(K8s)的简介
java·容器·kubernetes
zygswo4 小时前
程序猿成长之路之设计模式篇——设计模式简介
java·设计模式
除了代码啥也不会5 小时前
springboot项目发送邮件
java·spring boot·spring
无敌の星仔6 小时前
一个月学会Java 第7天 字符串与键盘输入
java·开发语言·python
GGBondlctrl6 小时前
【JavaEE初阶】多线程案列之定时器的使用和内部原码模拟
java·开发语言·定时器·timer的使用·定时器代码模拟
多多*6 小时前
OJ在线评测系统 微服务高级 Gateway网关接口路由和聚合文档 引入knife4j库集中查看管理并且调试网关项目
java·运维·微服务·云原生·容器·架构·gateway