我学习搭建的vue后台管理,最近弄到用户-权限-角色的分配。

在做给角色分配权限的时候,涉及到数据库的批量删除,插入已经需要用到的事务。这里做一下记录。

批量删除

在这里插入图片描述
在分配的权限列表里面,我可以对角色分配的权限进行删除操作。权限分为三级。
如果是删除第一级或者第二级权限,那么子权限肯定也要跟着删除,所以这就需要批量删除了。
主要是在角色-权限关系表里面进行操作。这里主要将mapper里面的操作方式,其他没什么好讲的。

springboot mapper代码:
@DeleteProvider(type = Provider.class, method = "batchDeleteRights")
 int deleteRightsByIds(@Param("ids") String ids,@Param("roleid") Long roleid);
 
 class Provider {
  /* 批量删除权限 */
  public String batchDeleteRights(String ids,Long roleid) {
      StringBuilder sb = new StringBuilder();
      sb.append("DELETE FROM t_role_right WHERE role_id="+roleid+" AND right_id IN ("+ids+")");
      return sb.toString();
  }
}

其实如果是操作mysql语句的话,其实就是如下语句
"DELETE FROM t_role_right WHERE role_id="+roleid+" AND right_id IN ("+ids+")"

这个其实很容易,但是如果是springboot的注解方式,不熟悉的人可能就有点懵逼了。方法就是上面。说白的,就是拼接的方式表达方法而已。

批量插入

在这里插入图片描述
分配权限的时候需要将一级二级二级权限id全部传到服务器进行关联,这个时候就涉及到批量插入的问题。老规矩,上代码,还是mapper的代码。

@Insert({
            "<script>",
            "insert into t_role_right(role_id,right_id) values ",
            "<foreach collection='ids' item='item' index='index' separator=','>",
            "(#{roleId}, #{item})",
            "</foreach>",
            "</script>"
    })
    int insertRightsToRole(@Param(value="ids") List<String> ids,@Param(value="roleId") Long roleId);

单纯操作数据库肯定容易,但是在springboot怎么表示才是我们要知道的,上面是另外一种拼接和操作方式,和上面批量删除的方式一样都可以用来操作批量删除和批量插入。这边主要是为了了解和学习,所以用了两种方式。

事务

在进行上面批量插入的时候,我需要先删除该角色下的所有权限再进行批量插入,但是有一个问题,万一我删除完,批量插入失败了,那不就悲剧了吗。所以这个时候,就需要事务了。
在springboot使用事务也挺容易的,就是在服务实现类的方法里面添加@Transactional
代码如下:

@Service
public class TAdminUserServiceImpl implements TAdminUserService {
	@Transactional
	@Override
	public int insertRightsToRole(List<String> ids, Long roleId) {
	
	    tAdminUserMapper.deleteRightByRoleId(roleId);  //删除角色下的权限
	    return tAdminUserMapper.insertRightsToRole(ids,roleId); //批量插入
	}
}

另外需要在Application添加@EnableTransactionManagement。不过也有人说不用加也行,我没有去具体尝试,有兴趣可以去试试。

git前端地址:https://gitee.com/stonezry/Vue-Admin-Demo

git接口地址:https://gitee.com/stonezry/Springboot-Admin-Demo

欢迎关注本人公众号和小程序,谢谢
在这里插入图片描述

在这里插入图片描述

Logo

前往低代码交流专区

更多推荐