CRM权限管理

该博客介绍了CRM系统中基于RBAC模型的权限管理,包括用户管理、角色管理和资源管理三大功能的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 权限管理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添加删除监听事件实现资源记录删除操作
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值