# 回顾
- PageHelper 分页插件
1.引入坐标
2.在mybatis和sprig整合的时候配置方言
3.在service中使用PageHelper( 设置分页参数,查询全部,构造PageInfo的返回值 )
- 部门管理
1.子部门和父部门的一对一
- RBAC权限模型
用户,角色,模块(权限菜单)
用户和角色多对多(中间表),角色和模块的多对多(中间表)
- 用户管理
<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
<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);
}
}
}
字段:
module_id : 主键
parent_id : 父菜单的id
parent_name : 父菜单名称
name : 模块名
curl : 菜单的访问路径url
ctype : 模块的类型 , 0:一级,1:二级,2:按钮,3:超链接
state : 状态 0:不可用,1:可用
belong : 菜单的从属关系 0 : 属于saas管理模块 ,1: 企业的业务模块
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);
}
}
在前端展示树形结构的数据: 使用的方案(公共的开源的js插件,dtree,tdtree,ztree)
ztree : 是国内开源的前端的树形插件
1.ztree的配置 :setting
2.ztree的数据:json字符串
3.调用init方法构造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>
前端页面