若依框架学习(前后端分离)——(用户管理学习篇(2))

ruoyi若依 组织架构设计--[ 角色管理 ] 有一点,我认为新增的时候,也需要修改redis中的权限。删除角色部门关联表是为了删除当前角色分配的数据权限。所谓的角色分配用户,其实就是把当前角色分配给多个用户。注意一下数据权限即可。 阅读详情

系列文章目录

若依框架学习(前后端分离)——(win11部署docker redis)
若依框架学习(前后端分离)——(redis 浅学)
若依框架学习(前后端分离)——(启动)
若依框架学习(前后端分离)——(登录代码学习篇)
若依框架学习(前后端分离)——(用户管理学习篇(1))


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

之前已经学习过用户信息查询功能,部门相关功能。页面中还有的功能板块就是增删改功能:
在这里插入图片描述


一、添加用户

在这里插入图片描述
可以看到需要后台提供的是:1.部门树状图 2.岗位 3.角色 其他都可以自填

/** 新增按钮操作 */
    handleAdd() {
      this.reset();//表单重置,清空方便填写
      getUser().then(response => {
        this.postOptions = response.posts;
        this.roleOptions = response.roles;
        this.open = true;
        this.title = "添加用户";
        this.form.password = this.initPassword;
      });
    },
 /**
     * 根据用户编号获取详细信息
     */
    @PreAuthorize("@ss.hasPermi('system:user:query')")
    @GetMapping(value = { "/", "/{userId}" })
    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
    {
        userService.checkUserDataScope(userId);//查看有无权限
        AjaxResult ajax = AjaxResult.success();
        List<SysRole> roles = roleService.selectRoleAll();//所有角色
        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));//是管理员就给所有的roles不是的话滤去管理员角色
        ajax.put("posts", postService.selectPostAll());//把所有的岗位查出来
        if (StringUtils.isNotNull(userId))//userId作用:判断是新增还是修改,前者为null
        {
            SysUser sysUser = userService.selectUserById(userId);
            ajax.put(AjaxResult.DATA_TAG, sysUser);
            ajax.put("postIds", postService.selectPostListByUserId(userId));//有id就查出当前拥有的信息
            ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList()));
        }
        return ajax;
    }

填写之后确认提交

 /** 提交按钮 */
    submitForm: function() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          if (this.form.userId != undefined) {//如果有id就是修改没有就是新增
            updateUser(this.form).then(response => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            });
          } else {
            addUser(this.form).then(response => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
            });
          }
        }
      });
    },
 /**
     * 新增用户
     */
    @PreAuthorize("@ss.hasPermi('system:user:add')")
    @Log(title = "用户管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@Validated @RequestBody SysUser user)
    {
        if (!userService.checkUserNameUnique(user))
        {
            return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
        }
        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
        {
            return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
        }
        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
        {
            return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
        }
        user.setCreateBy(getUsername());
        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));//这里是为设置的密码进行加密
        return toAjax(userService.insertUser(user));
    }
/**
     * 新增保存用户信息
     * 
     * @param user 用户信息
     * @return 结果
     */
    @Override
    @Transactional
    public int insertUser(SysUser user)
    {
        // 新增用户信息
        int rows = userMapper.insertUser(user);
        // 新增用户岗位关联
        insertUserPost(user);
        // 新增用户与角色管理
        insertUserRole(user);
        return rows;
    }

这里有讲到 岗位和人实际是多对多关系,可以一个岗位很多员工,也可以一个员工身兼数职,那么这里就涉及到了数据库多对多表的建立关系,即再建立个关系表就可以。
在这里插入图片描述

二、修改用户

在这里插入图片描述

 /** 修改按钮操作 */
    handleUpdate(row) {
      this.reset();//这里为什么还要清空?因为要清空了再去后台调现在的信息
      const userId = row.userId || this.ids;
      getUser(userId).then(response => {//除去所有的角色还要获取当前用户已经拥有的 看前面提到的 * 根据用户编号获取详细信息的代码
        this.form = response.data;
        this.postOptions = response.posts;
        this.roleOptions = response.roles;
        this.$set(this.form, "postIds", response.postIds);
        this.$set(this.form, "roleIds", response.roleIds);
        this.open = true;
        this.title = "修改用户";
        this.form.password = "";
      });
    },
/**
     * 修改用户
     */
    @PreAuthorize("@ss.hasPermi('system:user:edit')")
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@Validated @RequestBody SysUser user)
    {
        userService.checkUserAllowed(user);//看当前用户是否允许被修改
        userService.checkUserDataScope(user.getUserId());
        if (!userService.checkUserNameUnique(user))//检查名字是否重复
        {
            return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
        }
        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
        {
            return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
        }
        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
        {
            return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
        }
        user.setUpdateBy(getUsername());
        return toAjax(userService.updateUser(user));
    }
    /**
     * 修改保存用户信息
     * 
     * @param user 用户信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateUser(SysUser user)//先删后加 完成修改 不需要判断存在
    {
        Long userId = user.getUserId();
        // 删除用户与角色关联
        userRoleMapper.deleteUserRoleByUserId(userId);
        // 新增用户与角色管理
        insertUserRole(user);
        // 删除用户与岗位关联
        userPostMapper.deleteUserPostByUserId(userId);
        // 新增用户与岗位管理
        insertUserPost(user);
        return userMapper.updateUser(user);
    }

三、删除用户

    /** 删除按钮操作 */
    handleDelete(row) {
      const userIds = row.userId || this.ids;
      this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
        return delUser(userIds);
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess("删除成功");
      }).catch(() => {});
    },
/**
     * 删除用户
     */
    @PreAuthorize("@ss.hasPermi('system:user:remove')")
    @Log(title = "用户管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{userIds}")
    public AjaxResult remove(@PathVariable Long[] userIds)
    {
        if (ArrayUtils.contains(userIds, getUserId()))
        {
            return error("当前用户不能删除");
        }
        return toAjax(userService.deleteUserByIds(userIds));
    }
    /**
     * 通过用户ID删除用户
     * 
     * @param userId 用户ID
     * @return 结果
     */
    @Override
    @Transactional
    public int deleteUserById(Long userId)
    {
        // 删除用户与角色关联
        userRoleMapper.deleteUserRoleByUserId(userId);
        // 删除用户与岗位表
        userPostMapper.deleteUserPostByUserId(userId);
        return userMapper.deleteUserById(userId);
    }


总结

本文介绍了若依系统中用户管理模块是如何实现的增删改用户操作。

若依源码分析(4)——角色管理 文章目录角色管理界面 /system/roleSysRoleController进行Controller层控制进入role()方法,跳转到role.html页面页面元素显示(调用字典的逻辑)——以“角色状态”复选框为例pojo - 字典数据表pojo - 字典类型表DictService进行字典元素的数据处理逻辑查询角色 /system/role/list此url在role.html加载函数中... 阅读详情

相关推荐

013-若依pro(ruoyi-vue-pro)的用户体系

AdminUser 管理员用户,前端访问 yudao-ui-admin (opens new window)管理后台,后端访问 /admin-api/** RESTful API 接口。MemberUser 会员用户,前端访问 yudao-ui-user (opens new window)用户 App,后端访问 /app-api/**RESTful API 接口。

RichardHLee的博客 1340

若依的权限控制该怎么做(超详细的图文教程)

若依的权限控制

Keep__Me的博客 5万+

若依前后端分离框架学习-2:登录过程

    上一篇写了下若依前后端分离框架中前端至弹出登陆界面的过程,本片来详细了解下登录的整个过程。     后端包含ruoyi-admin,ruoyi-common,ruoyi-framework等多个模块,ruoyi-admin为启动模块。先看一下ruoyi-admin/src/main/application.yml配置文件。 # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 8

liuzixin_lzx的博客 1万+

【学习】若依源码(前后端分离版)之 “ 用户管理根据不同角色、部门显示数据范围”

起因是我想做一个根据不同角色以及其所在的部门展示其相应的信息,只能展示自己部门的信息。后面发现若伊竟然自带了这个功能,不得不说真的强大。它自带了用户管理菜单,里面有角色、部门、用户的模块,其中每个模块又互相有着关系。这篇文章就来好好了解一下他是怎么实现这个功能的。

qq_44386537的博客 6572

若依框架-前后端分离版环境搭建及启动教程

主要介绍了若依-前后端分离版项目环境搭建以及启动的过程

2403_87996093的博客 4595

使用【若依框架】快速搭建前后端分离项目

若依框架快速搭建前后端分离项目

y2736375642的博客 1788

若依框架学习(前后端分离)——(用户管理学习篇(1))

前面已经学习了关于登录的几个方法,具体有验证码的实现,登录验证,用户权限角色信息,用户路由建立等等。下面来学习具体用户管理涉及到的代码部分。本文简单介绍了用户数据加载,分页,查询,部门树建立功能。

yeahyeah81的博客 1966

基于前后端分离的工商考试管理系统

基于前后端分离的考试学习系统课程设计旨在开发一款满足学生、教师和管理员需求的在线考试和学习平台。主要参考超星学习通考试的系统,系统采用前、后端分离的技术实现,前端使用HTML5、CSS3和JavaScript、node.js、vue3及若依框架来实现页面框架搭建、布局、样式和交互,后端使用SSM框架搭建服务器、mysql创建数据库存储用户信息和考试资料。系统实现包括登录、主页、考试、练习题等功能界面的实现,还实现的调用摄像头的诚信考试功能模块的搭建,同时处理异常和跨域请求,保护系统安全。最终进行系

m0_65137405的博客 1665

若依框架入门(前后端分离版本)

学习基础:Springboot Vue 环境要求:JDK1.8+ MySQL Redis Maven Vue 下载地址:若依官网 ruoyi- ui为前端部分其余为后端部分,主要服务与ruoyi-admin文件夹 下载步骤:复制路径打开idea克隆即可 https://gitee.com/y_project/RuoYi-Vue.git 因为是分离版本我们除了启动后端部分外还要启动前端部分 当然我们也可以使用idea分别打开前后端部分这里就不列举了 ...

Theshy08的博客 14万+

.NET 8 通用权限框架 前后端分离,开箱即用

基于.NET 8(Furion)/SqlSugar实现的通用管理平台。整合最新技术,模块插件式开发,前后端分离,开箱即用。让开发更简单、更通用、更流行!

DotNet技术匠 1721

若依-前后端分离项目学习

若依-前后端分离项目学习

m0_68728226的博客 1082

若依框架——前后端分离版

若依(RuoYi)是一款基于 Spring Boot、Spring Security、MyBatis-plus、Vue、Element-UI 的快速开发平台,是一个全功能权限系统,采用前后端分离的方式进行开发。若依包含了许多常用的功能,例如用户管理、角色管理、菜单管理、部门管理、字典管理、定时任务等等,还提供了代码生成器、日志管理、在线用户管理等扩展功能,可以快速搭建企业级应用。

moran_3346的博客 3万+

海外支付实战:虚拟信用卡订阅ChatGPT Plus等服务的完整指南

在跨境数字服务消费中,支付环节常因地区限制、银行风控等因素受阻。其核心原理在于国际信用卡交易需通过发卡行风控系统,而国内银行对高频、小额或商户名非常规的境外线上交易敏感,导致成功率不稳定。为解决这一痛点,虚拟信用卡技术应运而生,它通过服务商生成关联预充值账户的虚拟卡号,提供地域灵活性与资金可控性,显著提升了支付通过率。这项技术的价值在于以较低学习成本,为个人用户打通了访问ChatGPT Plus、Midjourney、Claude Pro等前沿AI服务的支付通道。其典型应用场景包括订阅各类海外SaaS、内容

weixin_42531579的博客 1028

若依框架学习(前后端分离)——(异步任务管理器)

之前关于用户管理页面的操作及代码学习流程已经比较熟络,今天主要学习提到的异步任务管理器。

yeahyeah81的博客 2159

kettle从入门到精通 第九十二课 ETL之kettle 使用Kettle的Carte对外发布读写接口

场景:使用kettle实现将查询结果返回给客户端,也就是说kettle暴露查询接口供外围系统调用。前提必须是使用carte服务才可以提供接口供外部系统调用。具体实操方法如下:1、设计转换根据具体需求设计转换,主要用到的步骤有获取变量(从请求参数中获取变量)、json输入(解析入参),json 输出将结果转换为json格式输出到客户端。如下图所示:2、接收参数使用获取变量步骤来接收接口请求参数,变量通过${}方法进行获取,如下图${PARAM}则是获取PARAM参数,将参数赋值为req字段。

zhangjin1222的博客 954

MicroPython跨平台移植实战:从源码解析到STM32+FreeRTOS部署

本文详细解析了MicroPython的跨平台移植实战,重点介绍了如何将其从源码开始,成功部署到STM32微控制器并运行于FreeRTOS实时操作系统。内容涵盖源码结构解析、编译环境搭建、内存管理协调、FreeRTOS任务集成、数学库(math)启用与优化,以及自定义模块开发等核心步骤,为开发者提供了一套完整的、可操作的嵌入式Python移植方案。

vodka的博客 1014

关于前后端分离框架的一些疑问

关于前后端分离框架的一些疑问

weixin_54106682的博客 1786

YOLO系列算法改进 | Head改进篇 | 融合Detect_LSCD轻量共享卷积检测头 | 轻量化设计破解计算瓶颈,增强复杂场景目标感知能力

YOLO系列算法改进 | Head改进篇 | 融合Detect_LSCD轻量共享卷积检测头 | 轻量化设计破解计算瓶颈,增强复杂场景目标感知能力 (以YOLO26最新目标检测模型为基础,融合Detect_LSCD检测头进行改进)

2502_91881744的博客 704

Python Web前后端分离框架Django+Vue搭建

Python Web前后端分离框架Django+Vue搭建 对前面所学知识的归纳整理,感兴趣的可以看看,欢迎指正,原文:https://github.com/HelloMasonC/fullstack/blob/master/02-%E5%90%8E%E7%AB%AF/08-Python%20Web%E5%89%8D%E5%90%8E%E7%AB%AF%E5%88%86%E7%A6%BB%E6%A1%86%E6%9E%B6%E6%90%AD%E5%BB%BA.md 一、前后端分离框架介绍 本项目基于 P

sensenxiangshang 1万+

使用CUDA进行按流排序的内存分配的示例程序

在GPU编程中,按流排序的内存分配是一种常见的优化技术,它可以提高内存访问的效率。通过将内存分配与特定的CUDA流相关联,可以确保在GPU上的并发操作期间,内存分配操作与其他GPU计算操作同时进行,从而减少了潜在的内存访问延迟。请注意,上述示例中的代码仅供参考,并可能需要根据实际需求进行修改和调整。此外,为了完整性,我们省略了一些细节,例如主机指针的分配和释放,以及错误处理和错误检查等。在该示例中,我们创建了4个CUDA流,并使用内存池进行内存分配。然后,我们在每个流上执行了相应的内存访问操作,并使用。

Byte_O_O的博客 282

把 ST03 的历史数据留得更久:ABAP Workload 统计保留期设置、原理与落地避坑指南

SAP ST03性能数据保留期配置指南 ST03/ST03N是SAP系统性能分析的核心工具,但默认数据保留期通常较短(3个月左右),难以满足跨季度对比、年度规划等需求。本文详细解析了ST03数据保留期的配置方法及注意事项: 数据存储机制:性能数据存储在监控库中,通过定期重组作业清理过期数据 配置路径:7.0+系统在"Workload Collector Database→Reorganization→Control"中按Profile分别设置 关键限制:保留期最大值建议不超过99,否则可

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 218

前后端分离架构,超全面详解~

此文通俗易懂,全面讲解前后端分离架构核心思想与作用,对学习微服务、开发企业项目大有裨益,建议收藏细品,好好领悟!~一、简介前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+...

独行侠梦的博客 2万+

perl 安装DBI和DBD

还可以从cpan.perl.org站点下载tar压缩文件形式的源代码发行版本,解压缩后,切换到相应的文件目录 cd DBI-1.54 perl Makefile.PL make make test make install 安装DBD时候 需要export ORACLE_HOME 验证安装: perldoc DBD::Oracle perldoc DBI 在线文档; perldoc -m

zhaoyangjian724的专栏 1754

【学习小记】001.前后端分离小疑问

根据java学习情况和查找资料,记录下来,方便后续可持续、可移动、可有迹可循的学习。

qq_54239348的博客 1695

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Spring Security框架 前后端分离版

Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spring 家族中的 成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方 案。正如你可能知道的关于安全方面的两个主要区域是“认证”和“授权”(或者访问控 制),一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权 (Authorization)两个部分,这两点也是 Spring Security 重要核心功能。

asddasddeedd的博客 4614

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 若依框架学习(前后端分离)——(用户管理学习篇(1))
下一篇: 若依框架学习(前后端分离)——(异步任务管理器)
yeahyeah81
博客等级 码龄9年 137粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值