JAVA全系列 教程
3762个小节阅读:7088.3k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
角色需要对其拥有的权限进行添加和删除,这样就需要查询所有的权限以及角色所拥有的权限。
先构建一个实体类——带状态的权限,状态代表着角色是否拥有该权限。
xxxxxxxxxx
// 带有状态的权限,状态表示角色是否拥有该权限
@Data
public class PermissionWithStatus {
private Integer pid;
private String permissionName; // 权限名
private String permissionDesc;//权限详情
private Boolean roleHas; // 角色是否拥有该权限
}
编写PermissionMapper
xxxxxxxxxx
public interface PermissionMapper extends BaseMapper<Permission> {
// 查询角色拥有的所有权限的id
List<Integer> findPermissionIdByRole(Integer rid);
}
编写PermissionMapper.xml
xxxxxxxxxx
<mapper namespace="com.itbaizhan.travel.mapper.PermissionMapper">
<select id="findPermissionIdByRole" parameterType="int" resultType="int">
SELECT pid FROM role_permission WHERE rid = #{rid}
</select>
</mapper>
编写RoleService
xxxxxxxxxx
// 查询角色的权限情况
public List<PermissionWithStatus> findPermission(Integer rid){
// 查询所有权限
List<Permission> permissions = permissionMapper.selectList(null);
// 查询角色拥有的所有权限id
List<Integer> pids = permissionMapper.findPermissionIdByRole(rid);
// 带有状态的权限集合
List<PermissionWithStatus> permissionList = new ArrayList();
// 遍历所有权限
for (Permission permission:permissions){
// 创建带有状态的权限
PermissionWithStatus permissionWithStatus = new PermissionWithStatus();
// 将权限属性复制给带有状态的权限
BeanUtils.copyProperties(permission,permissionWithStatus);
// 如果角色拥有该权限
if(pids.contains(permission.getPid())){
permissionWithStatus.setRoleHas(true);
}else {
permissionWithStatus.setRoleHas(false);
}
permissionList.add(permissionWithStatus);
}
return permissionList;
}
编写RoleController
xxxxxxxxxx
@RequestMapping("/findPermission")
public ModelAndView findRole(Integer rid) {
List<PermissionWithStatus> permissions = roleService.findPermission(rid);
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("permissions", permissions);
modelAndView.addObject("rid", rid);
modelAndView.setViewName("/backstage/role_permission");
return modelAndView;
}
编写页面role_permission.html
xxxxxxxxxx
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>分配权限</title>
<th:block th:replace="/backstage/common_resources::common_css"/>
<th:block th:replace="/backstage/common_resources::common_js"/>
</head>
<body class="hold-transition skin-purple sidebar-mini">
<div class="wrapper">
<!-- 页面头部 -->
<header th:replace="~{/backstage/common_header::header}"></header>
<!-- 导航侧栏 -->
<aside th:replace="~{/backstage/common_aside::aside}"></aside>
<!-- 内容区域 -->
<div class="content-wrapper">
<!-- 内容头部 -->
<section class="content-header">
<h1>
角色管理 <small>分配权限</small>
</h1>
<ol class="breadcrumb">
<li><a th:href="@{/backstage/index}"><i
class="fa fa-dashboard"></i> 首页</a></li>
<li><a th:href="@{/backstage/role/all}">角色管理</a></li>
<li class="active">分配权限</li>
</ol>
</section>
<!-- 正文区域 -->
<section class="content">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">列表</h3>
</div>
<div class="box-body">
<!-- 数据表格 -->
<div class="table-box">
<form th:action="@{/backstage/role/updatePermission}">
<!--数据列表-->
<table id="dataList"
class="table table-bordered table-striped table-hover dataTable">
<thead>
<tr>
<th class="" style="padding-right: 0px"><input
id="selall" type="checkbox" class="icheckbox_square-blue">
</th>
<th>权限名</th>
<th>权限详情</th>
</tr>
</thead>
<tbody>
<input type="hidden" name="rid" th:value="${rid}">
<tr th:each="permission : ${permissions}">
<td th:if="${permission.roleHas}">
<input name="ids" type="checkbox" th:value="${permission.pid}" class="icheckbox_square-blue" checked>
</td>
<td th:if="${!permission.roleHas}">
<input name="ids" type="checkbox" th:value="${permission.pid}" class="icheckbox_square-blue">
</td>
<td th:text="${permission.permissionName }"></td>
<td th:text="${permission.permissionDesc }"></td>
</tr>
</c:forEach>
</tbody>
</table>
<div class="box-tools text-center">
<button type="submit" class="btn bg-maroon">保存</button>
<button type="button" class="btn bg-default" onclick="history.back(-1);">返回
</button>
</div>
<!--数据列表/-->
</form>
</div>
<!-- 数据表格 /-->
</div>
</div>
</section>
</div>
<!-- 底部导航 -->
<footer th:replace="~{/backstage/common_footer::footer}"></footer>
</div>
</body>
</html>
启动项目,测试功能