-
权限管理RBAC基本概念
RBAC是基于角色的访问控制( Role-Based Access Control )在RBAC中,权限与角色相关联,用户通过扮演适当的角色从而得到这些角色的权限。 这样管理都是层级相互依赖的,权限赋予给角色,角色又赋予用户,这样的权限设计很清楚,管理起来很方便。 RBAC授权实际上是Who 、 What 、 How三元组之间的关系,也就是Who对What进行How的操作,简单说明就是谁对什么资源做了怎样的操作。 功能实现上这里划分为三大模块: 用户管理、角色管理、资源管理
-
用户管理功能实现
用户查询操作 1.后端代码实现 1.UserQuery.java查询类定义 2.UserMapper.xml设置SQL查询语句 3.UserService.java使用多条件分页查询方法 4.UserController.java调用service层中的查询方法并且给予入口 2.前端核心代码 1.views/user目录下添加user.ftl视图模板 2.UserController后台设置对应的接口 3.js/user目录下添加user.js文件 4.user.ftl添加搜索按钮 5.user.js添加搜索点击事件 用户添加操作 1.实现思路 1.参数校验 用户名 非空 唯一性 邮箱 非空 手机号 非空 格式合法 2.设置默认参数 isValid 1 creteDate 当前时间 updateDate 当前时间 userPwd 123456 -> md5加密 3.执行添加,判断结果 2.核心代码 1.UserService.java 1.参数校验 封装一个checkParams方法判断非空 2.设置默认参数 user.setIsValid(1); user.setCreateDate(new Date()); user.setUpdateDate(new Date()); user.setUserPwd(Md5Util.encode("123456")); 3.执行添加,判断结果 AssertUtil.isTrue(userMapper.insertSelective(user) == null, "用户添加失败!"); 2.UserController.java 调用service层中的添加方法并且给予入口 添加视图转发方法 3.user.js 头部工具栏事件,行监听事件 4.views/user目录下添加add_update.ftl模板文件 5.js/user目录下添加add.update.js文件,实现表单数据提交操作 用户更新操作 1.实现思路 1.参数校验 id 非空 记录必须存在 用户名 非空 唯一性 email 非空 手机号 非空 格式合法 2.设置默认参数 updateDate 3.执行更新,判断结果 2.核心代码 1.UserService.java 1.参数校验 通过id查询用户对象 User temp = userMapper.selectByPrimaryKey(user.getId()); 判断对象是否存在 AssertUtil.isTrue(temp == null, "待更新记录不存在!"); 封装一个checkParams方法判断非空 2.设置默认参数 temp.setUpdateDate(new Date()); 3.执行更新,判断结果 AssertUtil.isTrue(userMapper.updateByPrimaryKeySelective(user) < 1, "用户更新 失败!"); 2.UserController.java 调用service层中的更新方法并且给予入口 添加视图转发方法 3.user.js 头部工具栏事件,行监听事件 4.views/user目录下添加add_update.ftl模板文件 5.js/user目录下添加add.update.js文件,实现表单数据提交操作 用户删除操作 1.后端代码实现 1.UserMapper.xml设置SQL删除语句 用户数据支持数据批量删除操作,后端接收前端数组参数借助mybatis动态标签foreach实现记录批量删除。 2.UserService.java使用删除方法 3.UserController.java调用service层中的删除方法并且给予入口 2.前端核心代码 修改user.js文件,添加删除按钮事件 用户角色关联 1.用户角色查询 1.后端代码实现 RoleMapper.xml添加查询所有角色的SQL语句 RoleMapper.java定义查询角色信息的接口 RoleService.java使用查询方法 RoleController.java提供方法返回所有角色记录 2.前端核心代码 user/add_update.ftl在用户的添加和修改页面,设置选择用户角色的下拉框 user/add.update.js要引入formSelects模块实现下拉框数据填充操作,而且设置查询角色记录时传入用户id
-
角色管理功能实现
角色记录查询 1.后端代码实现 RoleMapper.xml设置SQL查询语句 RoleQuery.java查询类定义角色名 RoleController.java添加角色关注主页面视图转发和列表查询方法 2.前端核心代码 views/role目录下创建role.ftl文件 js/role目录下添加role.js初始化角色表格数据 角色添加 1.后端代码实现 RoleService.java使用添加方法,其中进行参数校验 RoleController.java调用service层方法并提供入口 2.前端核心代码 role.js添加添加点击事件 views/role目录下添加add_update.ftl文件 js/role目录下添加add_update.js文件 角色更新 1.后端代码实现 RoleService.java使用更新方法,其中进行参数校验 RoleController.java调用service层方法并提供入口 2.前端核心代码 role.js添加更新点击事件 views/role目录下添加add_update.ftl文件 js/role目录下添加add_update.js文件 角色删除 1.后端代码实现 RoleService.java使用删除方法 RoleController.java调用service层方法并提供入口 2.前端核心代码 修改role.js 添加删除事件实现角色记录删除操作。 角色授权 实现角色授权首先完成待授权资源显示功能。对于资源的显示,这里使用开源的tree插件ztree 1.资源数据查询后端实现 ModuleMapper.xml设置SQL查询语句 ModuleService.java使用查询方法 ModuleController.java调用service层方法并提供入口 2.资源数据ztree显示 role.js添加授权点击事件 RoleController.java添加视图转发方法 views/role目录下添加grant.ftl模板文件 添加grant.js用来配置ztree的参数 3.权限记录添加后端实现 RoleService.java使用添加方法 如果角色存在原始权限,则删除角色原始权限,然后添加角色新的权限,批量添加权限记录到表t_permission中,其中进行参数校验 RoleController.java调用service层方法并提供入口 4.权限记录添加前端核心js 修改grant.js文件,其中添加ztree复选框点击回调onCheck事件 5.角色已添加权限记录回显 实现已添加的角色记录权限再次查看或授权时显示原始权限的功能 资源查询后端方法实现 ModuleService.java实现查询方法 根据角色id,查询角色拥有的菜单id,将它们保存在List<Integer>中 ModuleMapper.xml设置角色拥有权限SQL查询语句 ModuleController.java调用service层方法并提供入口 权限回显前端js 修改grant.js查询资源时传入当前选择角色id 角色权限认证 当完成角色权限添加功能后,下一步就是对角色操作的资源进行认证操作,这里对于认证包含两块: 1.菜单级别访问控制 登录用户角色拥有权限查询实现 IndexController.java后端管理主页面添加 //当用户登录后进去主页面之前将当前用户具备所有的权限码查询出来,放在session作用域中 List<Integer> permission = permissionService.selectAclvalueByUserId(id); //权限码 request.getSession().setAttribute("permission",permission); System.out.println(permission.toString()); PermissionService.java使用查询方法 PermissionMapper.java定义查询方法 PermissionMapper.xml设置SQL查询语句 系统主页面菜单显示指令控制(仅显示部分菜单控制) main.ftl 2.后端方法级别访问控制 实现了菜单级别显示控制,但最终客户端有可能会通过浏览器来输入资源地址从而越过ui界面来访问后端资源, 所以接下来加入控制方法级别资源的访问控制操作,这里使用aop+自定义注解实现 自定义注解@RequirePermission @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RequirePermission { String code() default ""; } 方法级别使用注解 @RequestMapping("list") @ResponseBody @RequirePermission(code = "101001") public Map<String,Object> querySaleChancesByParams(Integer flag,HttpServletRequest request,SaleChanceQuery saleChanceQuery){ if(null !=flag &&flag==1){ //查询分配给当前登录用户,营销记录 saleChanceQuery.setAggsinMan(LoginUserUtil.releaseUserIdFromCookie(request)); } return saleChanceService.queryByParamsForTable(saleChanceQuery); } 定义aop切面类,拦截指定注解标注的方法 @Component @Aspect public class PermissionProxy{}
-
资源管理功能实现
资源记录查询 1.后端代码实现 菜单资源展示这里使用layui treeTable组件显示 ModuleMapper.xml设置SQL查询语句 ModuleService.java使用查询方法 ModuleController.java调用service层并提供入口 2.前端代码实现 views/module目录下添加module.ftl模板文件 js/module目录下添加module.js,初始化表格数据 资源记录添加 1.实现思路 1.参数校验 模块名-module_name 非空 同一层级下模块名唯一 url 二级菜单 非空 不可重复 上级菜单-parent_id 一级菜单 null 二级|三级菜单 parent_id 非空 必须存在 层级-grade 非空 0|1|2 权限码 optValue 非空 不可重复 2.参数默认值设置 is_valid create_date update_date 3.执行添加 判断结果 2.后端代码实现 使用AssertUtil.isTrue进行参数校验 默认值设置 module.setIsValid((byte)1); module.setCreateDate(new Date()); module.setUpdateDate(new Date()); 执行添加 判断结果 AssertUtil.isTrue(insertSelective(module)<1,"菜单添加失败!"); 3.控制层核心代码 ModuleController.java调用service层并提供入口 4.前端核心代码 module.ftl模板文件中添加添加监听事件 views/module目录下添加add.ftl资源添加模板文件 js/module目录下添加add.js实现资源添加表单数据提交 资源记录更新 1.实现思路 1.参数校验 id 非空 记录存在 模块名-module_name 非空 同一层级下模块名唯一 url 二级菜单 非空 不可重复 上级菜单-parent_id 二级|三级菜单 parent_id 非空 必须存在 层级-grade 非空 0|1|2 权限码 optValue 非空 不可重复 2.参数默认值设置 update_date 3.执行更新 判断结果 2.后端代码实现 使用AssertUtil.isTrue进行参数校验 默认值设置 module.setUpdateDate(new Date()); 执行添加 判断结果 AssertUtil.isTrue(updateByPrimaryKeySelective(module)<1,"菜单更新失败!"); 3.控制层核心代码 ModuleController.java调用service层并提供入口 4.前端核心代码 module.ftl模板文件中添加更新监听事件 views/module目录下添加update.ftl资源更新模板文件 js/module目录下添加update.js实现资源更新表单数据提交 资源记录删除 1.后端代码实现 ModuleService.java使用删除方法 ModuleController.java调用service层并提供入口 2.前端代码实现 修改module.js添加删除监听事件实现资源记录删除操作
CRM权限管理
于 2022-05-08 17:59:04 首次发布