java webapp实现添加用户角色(权限)功能

本博客是以我的上一篇博客为基础的。
首先要在数据库新建两张表。其中一张表存储不同角色的用户,另一张表建立用户和用户角色之间的关系。首先是用户角色表tb_role,目前有两种类型分别为admin和user,表结构如下。
在这里插入图片描述另一张表为user_role,该表建立用户和角色之间关系,表结构如下。
在这里插入图片描述然后建立如下关系,显然userId 和roleId都是作为外键的存在。
在这里插入图片描述然后在本地项目中的bean层中新建实体类Role和UserRole。
Role包含id和rolename属性,UserRole包含id、username、password属性(get、set方法、构造方法省略)。

package com.zr.bean;

public class Role {
    private int id;
    private String rolename;
  }
package com.zr.bean;

public class User {
    private int id;
    private String username;
    private String password;
    }

首先是登录界面要进行修改,先要根据用户的id查询的用户的角色,不同的角色可以操作的界面是不同的,将用户的角色列表(一个用户可以包含多个角色)添加到session属性roleIds中,前端根据roleIds显示对不同类型的用户,显示该用户角色所能够使用的功能。

@RequestMapping("login.do")
    public ModelAndView login(User user,HttpSession session){
        int id = userService.login(user.getUsername(), user.getPassword());
        ModelAndView modelAndView = new ModelAndView();
        if(id !=-1){
            List<Integer> roleIds = roleServive.findRoleByUserId(id);
            session.setAttribute("roleIds",roleIds);
            session.setAttribute("user",user);
            modelAndView.setViewName("main");
        }else {
            modelAndView.setViewName("../failer");
        }
        return modelAndView;
    }

添加用户权限请求发出,首先要查询到用户目前没有的权限,通过调用业务层roleServive,根据用户id查询用户还没有的权限(角色),由于有多个角色,所以需要用列表来存储返回的角色列表,然后利用setObject和setViewName将角色列表和用户id数据传递到前端界面。
当用户添加角色时,需要两个参数一个是角色的id(前端传多个id用,分隔),另个是用户的id,将添加的信息插入到url中,首先要将角色id字符串进行切分处理成,由于原来是字符串类型所以需要进行遍历并将转化成的int类型,并存储在新的List中(这是因为数据库中也是int类型),同时也要将用户id转化成int类型,接着调用业务层的roleService的addRole方法,将数据存储处理,最后回到用户管理界面。

@RequestMapping("toAddRole.do")
    public ModelAndView toAddRole(int id){
        List<Role> roleList = roleServive.findNotRoleByUserId(id);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("roles",roleList);
        modelAndView.setViewName("user-role-add");
        modelAndView.addObject("id",id);
        return modelAndView;
    }

    @RequestMapping("addRole.do")
    public String addRole(String roleIds,String userId){
        String[] strs = roleIds.split(",");
        List<Integer> ids = new ArrayList<>();
        for(String s:strs){
            ids.add(Integer.parseInt(s));
        }
        roleServive.addRole(ids,Integer.parseInt(userId));
        return "redirect:findAll.do";

    }

业务层新增接口IRoleService用来处理用户角色,接口实现类RoleSeriveImpl,其中通过用户id获取用户角色列表,通过用户id查询用户未获得角色的列表,最后是添加用户角色,由于数据是列表的形式,这里通过遍历,进行添加。

package com.zr.service.impl;

import com.zr.bean.Role;
import com.zr.bean.UserRole;
import com.zr.dao.IRoleDao;
import com.zr.service.IRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class RoleSeriveImpl implements IRoleService {
    @Autowired
    private IRoleDao roleDao;
    @Override
    public List<Integer> findRoleByUserId(int id) {
        return roleDao.findRoleIdsByUserId(id);
    }

    @Override
    public List<Role> findNotRoleByUserId(int id) {
        return roleDao.findNotRoleByUserId(id);
    }

    @Override
    public void addRole(List<Integer> ids,int userId) {
        for(int i:ids){
            UserRole userRole = new UserRole();
            userRole.setRoleId(i);
            userRole.setUserId(userId);
            roleDao.addRole(userRole);
        }
    }
}

随后是dao层IRoleDao的实现,这里也只是接口,需要利用RoleMapper.xml执行sql语句。

package com.zr.dao;

import com.zr.bean.Role;
import com.zr.bean.UserRole;

import java.util.List;

public interface IRoleDao {
    List<Integer> findRoleIdsByUserId(int id);

    List<Role> findNotRoleByUserId(int id);
    void addRole(UserRole userRole);
}

在mapper文件夹下,新增RoleMapper.xml文件,该文件是服务IRoleDao接口的,具体内容如下。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zr.dao.IRoleDao">
    <select id="findRoleIdsByUserId" parameterType="int" resultType="int">
        select roleId from user_role where userId = #{userId}
    </select>
    <select id="findNotRoleByUserId" parameterType="int" resultType="role">
        select * from tb_role where id not in (select roleId from user_role where userId =#{id})
    </select>
    <insert id="addRole" parameterType="role">
        insert into user_role(userId,roleId) value (#{userId},#{roleId})
    </insert>
</mapper>

最后是前端的修改
在侧边工具栏,当用户角色中包含id 1即,admin角色,才能进行角色管理功能。

<%
	List<Integer> roleIds = (List<Integer>) session.getAttribute("roleIds");
	if(roleIds.contains(1)){
%>
<li id="system-setting1"><a
	href="#"> <i
		class="fa fa-circle-o"></i> 角色管理
	</a></li>
	<%
		}
	%>

添加用户角色时,将用户id传入。
在这里插入图片描述最后是获取用户前端的参数,并将新增的信息通过href传递到后端。

function addRoles() {
			var checkNum=$("input[name='roleId']:checked").length;
			if(checkNum==0){
				alert("请至少选择1个角色添加");
				return;
			}
			if(confirm("你确认要添加这些角色吗?")){
				var roleList=new Array();
				$("input[name='roleId']:checked").each(
						function () {
							roleList.push($(this).val())
						}
				);
				var userId=$("input[name='userId']").val()
				location.href="/user/addRole.do?roleIds="+roleList.toString()+"&userId="+userId;
			}

		}

代码已上传GitHub,由于git使用还不是很熟,一些文件没有上传的都补上了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值