SSM项目批量删除和权限管理

1、用户批量删除

1.1 编写JavaScript,获得删除用户列表:

编写函数deleteAll(),首先获取用户选择的个数,然后新建一个列表userList,将选中的所有id装入其中。然后用ajax将数据传递给controller中的处理方法deleteAll.do

function deleteAll() {
				var checkedNum=$("input[name='ids']:checked").length;
				alert(checkedNum);
				if(checkedNum==0){
					alert("请至少选择一个进行删除!!!");
					return;
				}
				if(confirm("确认要删除这些用户吗?")){
					var userList=new Array();
					$("input[name='ids']:checked").each(
							function () {
								userList.push($(this).val())
							}
					);
					alert(userList);
					$.ajax({
						type:"post",
						url: "${pageContext.request.contextPath}/user/deleteAll.do",
						data:{userList:userList.toString()},
						success:function () {
							alert("删除成功");
							location.reload();

						},
						error:function () {
							alert("删除失败");
						}
					});
				}
			}

1.2 编写Dao层

接下来是要在数据库中删除对应的id,按照由下至上的顺序,先写dao层接口:

 void deleteAll(@Param("ids")List<Integer> ids);

编写sql语句
我们获取ids中的所有id,传入数据库进行删除。这里注意参数类型要填"list"

    <delete id="deleteAll" parameterType="list">
        delete from user_tb where id in 
        <foreach collection="ids" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>

    </delete>

1.3 编写Service层方法

直接调用dao的删除操作,传入的是一个int的id集合

    @Override
    public void deleteAll(List<Integer> ids) {
        userDao.deleteAll(ids);
    }

1.4 编写Controller层方法

注意我们从前端拿到的参数是转化成了String类型,所以这里先要用split()函数进行一次切分操作,之后就可以将列表对象送到下层进行数据库操作了。数据库更新信息之后,再重定向到列表更新用户信息表。

   @RequestMapping("deleteAll.do")
    public String deleteAll(String userList){
        String[] str=userList.split(",");
        List<Integer> ids=new ArrayList<>();
        for(String s:str){
            ids.add(Integer.parseInt(s));
        }
        userService.deleteAll(ids);
        return "redirect:findAll.do";
    }

1.5 测试

在这里插入图片描述

2 用户权限管理

管理用户权限需要为用户添加新的属性,也可以新加一个单独的权限实体,然后添加一个用户-权限对应实体类。

2.1 数据库设计

添加一个专门存放用户权限种类的表,和一个用户-权限对应关系表:

  • 权限表
    在这里插入图片描述
    表中添加两种权限:
    在这里插入图片描述
  • 用户-权限表:
    在这里插入图片描述

2.2 编写实体类

根据数据库表结构编写实体类:

public class Role {
    private int id;
    private String rolename;
    private String roledesc;
	private getters and setters
}

public class UserRole {
    private int id;
    private int userId;
    private int roleId;

    public UserRole() {
    }

    public UserRole(int id, int userId, int roleId) {
        this.id = id;
        this.userId = userId;
        this.roleId = roleId;
    }
    private getters and setters
 }

2.3 编写dao层

接口:三个方法,1 给指定用户添加权限 2 根据user编号返回他所有的权限对象 3 根据user编号返回他所有的权限编号:

public interface RoleDao {
    List<Integer> findRoleIdByUserId(int userId);
    List<Role> findRoleByUserId(int id);
    void addRole(UserRole userRole);
}

在mapper中编写sql语句:

    <select id="findRoleIdByUserId" parameterType="int" resultType="int">
        select  roleId from user_role where userId=#{userId}
    </select>

    <select id="findRoleByUserId" parameterType="int" resultType="role">
        select  * from role_tb where  id not in (select roleId from user_role where userId=#{id})
    </select>

    <insert id="addRole" parameterType="userRole">
        insert into user_role (userId,roleId) values (#{userId},#{roleId})
    </insert>

2.4 编写服务层方法

主要是add中由于拿到的是一个用户权限列表,所以用一个循环添加,另外记得要注入上一层的对象,以及添加Service注解

@Service
public class RoleServiceImpl implements RoleService {

    @Autowired
    private RoleDao roleDao;

    @Override
    public List<Integer> findRoleId(int userId) {
        return roleDao.findRoleIdByUserId(userId);
    }

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

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

    }
}

2.5 编写和修改Cotroller类

由于添加了权限,现在要在用户登录的时候将其权限加入session中记录:

 @RequestMapping("/login.do")
    private ModelAndView login(User user,HttpSession session){
        int id=userService.login(user.getUsername(),user.getPassword());

        ModelAndView mv=new ModelAndView();
        if(id!=-1){
            List<Integer> roleIds=roleService.findRoleId(id);
            session.setAttribute("roleIds",roleIds);
            session.setAttribute("user",user);
            mv.setViewName("main");
        }else{
            mv.setViewName("../failer");
        }
        return mv;
    }

添加权限也和修改用户信息一样包含了两步。首先进入添加权限界面,得到权限信息之后再进入修改操作

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

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

2.6 添加角色管理按键

注意这里在显示之前先要做一个用户角色的判断,如果用户是管理员才能修改其他人的权限。

<% List<Integer> roleIds=(List<Integer>) session.getAttribute("roleIds");%>
<% if(roleIds.contains(1)){%>
<a href="/user/toAddRole.do?id=${user.id}">添加角色</a>
	<%}%>

2.7 测试

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42189888/article/details/107591968