项目一 4 角色管理 模块管理 ztree树 对角色分配权限

# 回顾

- PageHelper 分页插件

​	1.引入坐标

​	2.在mybatis和sprig整合的时候配置方言

​	3.在service中使用PageHelper( 设置分页参数,查询全部,构造PageInfo的返回值 )

- 部门管理

  1.子部门和父部门的一对一

- RBAC权限模型

  用户,角色,模块(权限菜单)

  用户和角色多对多(中间表),角色和模块的多对多(中间表)

- 用户管理

1.角色管理

角色管理 : 对不同的租用企业进行角色的CRUD
项目一 4 角色管理 模块管理 ztree树 对角色分配权限_第1张图片
项目一 4 角色管理 模块管理 ztree树 对角色分配权限_第2张图片

<1> roleController相关代码

package cn.itcast.web.controller.system;

import cn.itcast.domain.system.Module;
import cn.itcast.domain.system.Role;
import cn.itcast.service.system.ModuleService;
import cn.itcast.service.system.RoleService;
import cn.itcast.web.controller.BaseController;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/system/role")
public class RoleController extends BaseController {

	@Autowired
	private RoleService roleService;

	/**
	 * 分页查询所有的角色
	 */
	@RequestMapping("/list")
	public String list(
			@RequestParam(defaultValue = "1") int page,
			@RequestParam(defaultValue = "5") int size) {
		//1.调用service
		PageInfo info = roleService.findAll(page, size, getLoginCompanyId());
		//2.将数据保存到request域
		request.setAttribute("page",info);
		//3.跳转页面
		return "system/role/role-list";
	}

	/**
	 * 跳转到添加页面
	 */
	@RequestMapping("/toAdd")
	public String toAdd() {
		return "system/role/role-add";
	}


	/**
	 * 保存或者更新角色
	 *      保存:
	 */
	@RequestMapping("/edit")
	public String edit(Role role) {
		//1.设置企业id
		role.setCompanyId(getLoginCompanyId());
		role.setCompanyName(getLoginCompanyName());
		//2.判断是否具有id
		if (StringUtils.isEmpty(role.getId())){
			//2.1 没id:保存
			roleService.save(role);
		}else{
			//2.2 有id:更新
			roleService.update(role);
		}
		return "redirect:/system/role/list.do";
	}

	/**
	 * 进入到修改的页面
	 *      1.根据id查询
	 */
	@RequestMapping("/toUpdate")
	public String toUpdate(String id) {
		Role role = roleService.findById(id);
		request.setAttribute("role",role);
		return "system/role/role-update";
	}

	/**
	 * 根据id删除
	 */
	@RequestMapping("/delete")
	public String delete(String id) {
		roleService.delete(id);
		return "redirect:/system/role/list.do";
	}

	/**
	 * 进入到分配权限的页面
	 */
	@RequestMapping("/roleModule")
	public String roleModule(String roleid) {
		//根据id查询角色
		Role role = roleService.findById(roleid);
		request.setAttribute("role",role);
		return "system/role/role-module";
	}



	@Autowired
	private ModuleService moduleService;
	/**
	 *  构造树形菜单数据 : 接收ajax请求
	 *  响应 : json数据
	 *  数据格式:
	 *       [
	 *           { id:11, pId:1, name:"随意勾选 1-1"},
	 *           { id:111, pId:11, name:"随意勾选 1-1-1"}
	 *       ]
	 *  注解: @ResponseBody 配置方法返回值上 ,将对象自动的转化为json
	 *  返回值: List
	 *  List中的每一个元素 :  自定义新的对象, Map集合
	 *  参数:
	 *      角色的id
	 */
	@RequestMapping("/getZtreeNodes")
	public @ResponseBody List getZtreeNodes(String roleId) {
		List list = new ArrayList();
		//查询所有的模块数据
		List modules = moduleService.findAll();
		//根据roleid查询角色所具有的所有的模块
		List roleModules = moduleService.findByRoleId(roleId);  //系统管理,用户管理,角色管理
		//循环模块
		for (Module module : modules) {
			//将每个模块构造为一个Map集合
			Map map = new HashMap();            //系统管理
			map.put("id",module.getId());
			map.put("pId",module.getParentId());
			map.put("name",module.getName());
			if(roleModules.contains(module)) {
				map.put("checked", true);
			}
			list.add(map);
		}
		return list;
	}


	/**
	 * 分配权限
	 *  roleid
	 *  moduleIds
	 */
	@RequestMapping("/updateRoleModule")
	public String updateRoleModule(String roleid,String moduleIds) {
		roleService.updateRoleModule(roleid,moduleIds);
		return "redirect:/system/role/list.do";
	}
}

<2> roleService相关代码

package cn.itcast.service.system.impl;

import cn.itcast.dao.system.RoleDao;
import cn.itcast.domain.system.Role;
import cn.itcast.service.system.RoleService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.UUID;

@Service
public class RoleServiceImpl implements RoleService {

	@Autowired
	private RoleDao roleDao;

	@Override
	public void save(Role role) {
		//1.设置id
		role.setId(UUID.randomUUID().toString());
		roleDao.save(role);
	}

	@Override
	public void update(Role role) {
		roleDao.update(role);
	}

	@Override
	public void delete(String id) {
		roleDao.delete(id);
	}

	@Override
	public Role findById(String id) {
		return roleDao.findById(id);
	}

	@Override
	public PageInfo findAll(int page, int size, String companyId) {
		//1.设置参数
		PageHelper.startPage(page,size);
		//2.查询全部
		List list = roleDao.findAll(companyId);
		//3.构造pageinfo返回值
		return new PageInfo(list);
	}

	//分配权限
	public void updateRoleModule(String roleId, String moduleIds) {
		//1.获取所有的模块id的数组
		String[] mids = moduleIds.split(",");
		//2.根据角色id删除所有的中间表数据
		roleDao.deleteRoleModule(roleId);
		//3.循环保存中间表数据
		for (String moduleId : mids) {
			roleDao.saveRoleModule(roleId,moduleId);
		}
	}
}

2.模块管理

项目一 4 角色管理 模块管理 ztree树 对角色分配权限_第3张图片
模块 : 一级菜单,二级菜单,按钮,超链接

字段:

module_id   : 主键
parent_id   : 父菜单的id
parent_name : 父菜单名称
name        : 模块名
curl        : 菜单的访问路径url
ctype       : 模块的类型 , 0:一级,1:二级,2:按钮,3:超链接
state    	: 状态 0:不可用,1:可用   
belong      : 菜单的从属关系 0 : 属于saas管理模块  ,1: 企业的业务模块  

项目一 4 角色管理 模块管理 ztree树 对角色分配权限_第4张图片
<1>项目一 4 角色管理 模块管理 ztree树 对角色分配权限_第5张图片

项目一 4 角色管理 模块管理 ztree树 对角色分配权限_第6张图片
<2>

ModuleController相关代码:

package cn.itcast.web.controller.system;

import cn.itcast.domain.system.Module;
import cn.itcast.service.system.ModuleService;
import cn.itcast.web.controller.BaseController;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@Controller
@RequestMapping("/system/module")
public class ModuleController extends BaseController {

	@Autowired
	private ModuleService moduleService;

	/**
	 * 分页查询
	 */
	@RequestMapping("/list")
	public String list(
			@RequestParam(defaultValue = "1") int page,
			@RequestParam(defaultValue = "5") int size) {
		//1.调用service
		PageInfo info = moduleService.findAll(page, size);
		request.setAttribute("page",info);
		//2.跳转页面
		return "system/module/module-list";
	}


	/**
	 * 跳转到添加页面
	 */
	@RequestMapping("/toAdd")
	public String toAdd() {
		//查询全部的模块
		List menus = moduleService.findAll();
		request.setAttribute("menus",menus);
		return "system/module/module-add";
	}

	/**
	 * 跳转到修改页面
	 */
	@RequestMapping("/toUpdate")
	public String toUpdate(String id) {
		//查询全部的模块
		List menus = moduleService.findAll();
		request.setAttribute("menus",menus);
		//根据id查询模块
		Module module = moduleService.findById(id);
		request.setAttribute("module",module);
		return "system/module/module-update";
	}

	/**
	 * 保存或者更新
	 */
	@RequestMapping("/edit")
	public String edit(Module module) {
		if(StringUtils.isEmpty(module.getId())){
			moduleService.save(module);
		}else{
			moduleService.update(module);
		}
		return "redirect:/system/module/list.do";
	}

	/**
	 * 删除
	 */
	@RequestMapping("/delete")
	public String delete(String id) {
		moduleService.delete(id);
		return "redirect:/system/module/list.do";
	}


}

<3>
ModuleServiceImpl相关代码:

package cn.itcast.service.system.impl;

import cn.itcast.dao.system.ModuleDao;
import cn.itcast.domain.system.Module;
import cn.itcast.service.system.ModuleService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.UUID;

@Service
public class ModuleServiceImpl implements ModuleService {

	@Autowired
	private ModuleDao moduleDao;

	@Override
	public void save(Module module) {
		module.setId(UUID.randomUUID().toString());
		moduleDao.save(module);
	}

	@Override
	public void update(Module module) {
		moduleDao.update(module);
	}

	@Override
	public void delete(String id) {
		moduleDao.delete(id);
	}

	@Override
	public List findAll() {
		return moduleDao.findAll();
	}

	@Override
	public PageInfo findAll(int page, int size) {
		PageHelper.startPage(page,size);
		List list = moduleDao.findAll();
		return new PageInfo(list);
	}

	@Override
	public Module findById(String id) {
		return moduleDao.findById(id);
	}

	//根据角色id查询所有的模块
	public List findByRoleId(String roleId) {
		return moduleDao.findByRoleId(roleId);
	}
}

3.分配权限(重点)

3.1 ztree树形组件

在前端展示树形结构的数据: 使用的方案(公共的开源的js插件,dtree,tdtree,ztree)

ztree : 是国内开源的前端的树形插件

1.ztree的配置 :setting

2.ztree的数据:json字符串

3.调用init方法构造ztree树

3.2 使用ztree展示模块的树形菜单

前端页面

<SCRIPT type="text/javascript">
    //1.Ztree的配置
    var setting = {
        check: {
            enable: true
        },
        data: {
            simpleData: {
                enable: true
            }
        }
    };


    var zTreeObj ; //整个ztree树
    //在页面加载的时候,调用init的方法展示ztree树
    $(document).ready(function(){
        $.get( "/system/role/getZtreeNodes.do?roleId=${role.id}", function( data ) {
            //回调函数 : 查询成功之后,需要执行的js内容
            //树展示的位置,树的基本配置,树的数据
            zTreeObj =  $.fn.zTree.init($("#treeDemo"), setting, data);
            zTreeObj.expandAll(true);//展开所有
        });
    });

    function submitCheckedNodes() {
        var nodes =  zTreeObj.getCheckedNodes(true);//获取 被勾选 的节点集合
        var moduleIds = "";
        for(var i=0;i<nodes.length;i++) {
            var node = nodes[i];
            moduleIds += node.id;
            if(i != nodes.length-1) {
                moduleIds += ",";
            }
        }
        //将拼接的字符串赋值到input中
        $("#moduleIds").val(moduleIds)
        //使用js的形式提交form表单即可
        $("#icform").submit();
    }
    //-->
</SCRIPT>

后端java

controller

项目一 4 角色管理 模块管理 ztree树 对角色分配权限_第7张图片
项目一 4 角色管理 模块管理 ztree树 对角色分配权限_第8张图片

service

项目一 4 角色管理 模块管理 ztree树 对角色分配权限_第9张图片

dao

项目一 4 角色管理 模块管理 ztree树 对角色分配权限_第10张图片

映射文件

项目一 4 角色管理 模块管理 ztree树 对角色分配权限_第11张图片

3.3 分配权限

项目一 4 角色管理 模块管理 ztree树 对角色分配权限_第12张图片

前端页面

controller

项目一 4 角色管理 模块管理 ztree树 对角色分配权限_第13张图片

service

项目一 4 角色管理 模块管理 ztree树 对角色分配权限_第14张图片

dao

在这里插入图片描述

作业

  1. 尝试分配用户
  2. 完成代码
  3. 回顾aop

你可能感兴趣的:(项目一)