当前位置: 首页 > news >正文

用户权限控制功能实现说明

功能概述

本功能实现了违规记录的用户权限控制,确保用户只能查看和操作自己添加的违规记录,提高数据安全性和隐私保护。

主要特性

1. 数据隔离

  • ✅ 用户只能查看自己创建的违规记录
  • ✅ 基于用户角色的权限控制
  • ✅ 支持不同角色的权限等级

2. 角色权限

  • 管理员 (manager): 可以查看和操作所有违规记录
  • 管家 (housekeeper): 可以查看和操作所有违规记录
  • 巡逻员 (patrol): 只能查看和操作自己创建的记录
  • 住户 (resident): 只能查看和操作自己创建的记录

3. 操作权限

  • 查看: 根据角色过滤数据
  • 编辑: 只能编辑自己创建的待处理记录
  • 删除: 管理员和管家可删除所有记录,普通用户只能删除自己的记录
  • 统计: 统计数据也基于权限过滤

技术实现

后端实现

1. 数据库变更
-- 添加创建者字段
ALTER TABLE violations 
ADD COLUMN created_by VARCHAR(50) COMMENT '创建者ID';-- 添加索引
CREATE INDEX idx_violations_created_by ON violations(created_by);
2. 实体类修改
// Violations.java
@ApiModelProperty(value = "创建者ID")
private String createdBy;
3. 控制器权限控制
// ViolationsController.java
private String getCurrentUserId(HttpServletRequest request) {// 从请求头或Token中获取用户IDString userId = request.getHeader("User-Id");// 或从JWT Token中解析return userId;
}private String getUserRole(HttpServletRequest request) {// 从请求头或Token中获取用户角色String role = request.getHeader("User-Role");return role;
}
4. 服务层过滤
// ViolationsServiceImpl.java
public IPage<Map<String, Object>> getViolationsWithOwnerInfo(..., String createdByFilter) {// 根据createdByFilter参数过滤数据if (StringUtils.hasText(createdByFilter)) {// 只返回指定创建者的记录}
}public boolean canUpdateViolation(Long violationId, String currentUserId, String userRole) {// 检查用户是否有权限更新指定记录if ("manager".equals(userRole) || "housekeeper".equals(userRole)) {return true; // 管理员和管家可以更新所有记录}// 普通用户只能更新自己创建的记录Violations violation = this.getById(violationId);return violation != null && currentUserId.equals(violation.getCreatedBy());
}

前端实现

1. 用户身份管理
// 获取当前用户信息
const userInfo = uni.getStorageSync('userInfo');
const currentUserId = userInfo?.userId || userInfo?.id;
const userRole = userInfo?.role;
2. 提交时设置创建者
// add-violation.vue
async submitToServer() {const userInfo = uni.getStorageSync('userInfo');const currentUserId = userInfo?.userId || userInfo?.id;const submitData = {// ... 其他数据createdBy: currentUserId, // 设置创建者IDreporterId: currentUserId};
}
3. 权限控制页面
// my-violations.vue
loadRecords() {const allRecords = uni.getStorageSync('user_violation_records') || [];// 筛选出当前用户的记录this.myRecords = allRecords.filter(record => {return record.createdBy === this.currentUserId;});
}

使用说明

1. 测试步骤

  1. 添加违规记录
    • 使用不同用户身份登录
    • pagesE/violation/add-violation.vue 页面添加违规记录
    • 记录会自动关联到当前用户
  1. 查看权限控制效果
    • 访问 pages/violation/my-violations.vue 页面
    • 查看 "权限控制演示" 区域的统计信息
    • 验证只能看到自己创建的记录
  1. 角色权限测试
    • 修改用户角色(在 userInfo 中)
    • 测试不同角色的查看和操作权限

2. 配置说明

用户信息存储格式
const userInfo = {userId: "user_123",        // 用户IDid: "user_123",           // 备用ID字段name: "张三",             // 用户姓名role: "patrol",           // 用户角色:manager/housekeeper/patrol/residentphone: "13800138000"      // 联系电话
};// 存储到本地
uni.setStorageSync('userInfo', userInfo);
请求头配置(生产环境)
// API请求时添加用户信息
uni.request({url: '/parking/violations',header: {'User-Id': currentUserId,'User-Role': userRole,'Authorization': 'Bearer ' + token}
});

安全注意事项

1. 前端安全

  • ❌ 前端权限控制仅用于UI展示,不能作为安全边界
  • ✅ 所有权限验证必须在后端进行
  • ✅ 敏感操作需要二次验证

2. 后端安全

  • ✅ 从可信来源(JWT Token)获取用户身份
  • ✅ 所有API都必须进行权限检查
  • ✅ SQL查询中添加权限过滤条件
  • ✅ 避免通过前端传递的用户ID进行权限判断

3. 数据库安全

  • ✅ 使用索引提高查询性能
  • ✅ 定期审计权限配置
  • ✅ 记录重要操作的日志

扩展功能

1. 审计日志

// 记录用户操作日志
@Component
public class ViolationAuditLogger {public void logCreate(String userId, String violationId) {// 记录创建日志}public void logUpdate(String userId, String violationId, String operation) {// 记录更新日志}
}

2. 数据脱敏

// 敏感数据脱敏
private String maskPhone(String phone) {if (phone != null && phone.length() >= 7) {return phone.substring(0, 3) + "****" + phone.substring(phone.length() - 4);}return phone;
}

3. 权限缓存

// 使用Redis缓存用户权限
@Cacheable(value = "user_permissions", key = "#userId")
public UserPermission getUserPermissions(String userId) {// 获取用户权限配置
}

故障排除

1. 常见问题

Q: 用户看不到任何记录?
A: 检查用户身份信息是否正确存储,确认 currentUserId 与记录中的 createdBy 字段匹配。

Q: 权限控制不生效?
A: 确认后端API已正确实现权限过滤逻辑,检查请求头中的用户信息传递。

Q: 数据库查询性能问题?
A: 确认已在 created_by 字段上创建索引,考虑添加复合索引。

2. 调试方法

// 前端调试
console.log('当前用户信息:', uni.getStorageSync('userInfo'));
console.log('用户记录数量:', this.myRecords.length);
console.log('全部记录数量:', this.allRecords.length);
// 后端调试
log.info("当前用户: {}, 角色: {}", currentUserId, userRole);
log.info("查询条件: createdByFilter = {}", createdByFilter);
log.info("返回记录数量: {}", result.getTotal());

版本历史

  • v1.0 (2025-01-31): 初始版本,实现基本的用户权限控制
  • 添加 created_by 字段支持
  • 实现角色权限控制
  • 前端权限验证和数据过滤

相关文件

后端文件

  • ViolationsController.java - 控制器权限检查
  • ViolationsService.java - 服务接口定义
  • ViolationsServiceImpl.java - 权限控制逻辑实现
  • Violations.java - 实体类(添加createdBy字段)

前端文件

  • add-violation.vue - 违规添加页面(设置创建者)
  • my-violations.vue - 个人违规记录查看页面
  • violation.vue - 违规记录列表页面

数据库文件

  • add_created_by_column.sql - 数据库迁移脚本

注意: 这是一个演示版本的权限控制实现。在生产环境中,建议使用更完善的权限管理框架(如Spring Security、Shiro等)和JWT认证机制。

http://www.dtcms.com/a/446635.html

相关文章:

  • 常见工厂后处理器作用
  • 公司免费网站制作云匠网接单
  • 网站建设与管理学习收获微信公众号免费模板网站
  • 企业可以做哪些网站做网站前端用什么语言
  • 阿里云服务器上传网站内容北京电力建设公司官网
  • 如何找到网站是谁做的哪家公司网站建设口碑好
  • Bootstrap 简介
  • 锡林浩特网站建设微信开发wordpress托管教程
  • 网站由什么组成网站备案更名
  • CPU高负载场景调优实战
  • 宣城地宝网站开发网络系统管理技能大赛考什么
  • 【Java核心技术/基础】30道Java核心技术集合框架面试题及答案
  • 代做网站公司哪家好pc网站开发
  • 如何用服务器发布网站揭阳制作公司网站
  • 开发网站网络公司wordpress 三栏主题
  • 门户网站报价常用的网站类型有哪些类型有哪些类型
  • 做网站外包群wordpress 大小
  • 论信息系统项目的资源管理和成本管理,(人力资源管理)
  • AI Workflow v.s. AI Agent v.s. Agentic Workflow 与应用建议
  • P1996 约瑟夫问题
  • 有哪些学做衣服的网站网站开发团队人数构成
  • 做网站苏州淘宝店网站建设
  • 对面试的一些思考
  • 【代码随想录day 35】 力扣 01背包问题 二维
  • 百度网盘怎么做网站友情链接交换平台免费
  • 网站模版亮点网站建设有关表格
  • 手机端网站制作教程合肥大型网站制
  • 鞍山高新区网站软文技巧
  • wordpress做物流网站网站建设合同书相关附件
  • 软件供应链风险预测实操指南——从SCA到SBOM 2.0的全流程落地