一、用户权限细分的重要性
在生鲜电商系统中,精细化的用户权限管理是保障系统安全、提升运营效率、优化用户体验的关键。美菜生鲜作为B2B生鲜供应链平台,需要为不同角色用户提供差异化功能权限,同时确保数据安全和操作合规。
二、核心用户角色与权限体系设计
1. 基础角色划分
| 角色类型 | 典型用户 | 核心权限需求 |
|---------|---------|-------------|
| 供应商 | 农产品生产商、批发商 | 商品管理、库存管理、订单处理、价格调整 |
| 采购商 | 餐饮企业、商超采购 | 商品浏览、下单、订单跟踪、账户管理 |
| 内部运营 | 客服、仓储、物流 | 订单处理、售后管理、库存调配、数据查看 |
| 管理员 | 系统管理员 | 用户管理、权限分配、系统配置、数据审计 |
| 财务人员 | 会计、出纳 | 结算管理、对账、发票处理、财务报表 |
2. 权限维度细分
功能权限:
- 商品管理(增删改查、上下架)
- 订单管理(创建、修改、取消、发货)
- 价格管理(定价、促销、折扣)
- 库存管理(入库、出库、盘点)
- 财务管理(结算、对账、发票)
- 数据分析(销售报表、库存预警)
数据权限:
- 区域数据隔离(不同地区供应商只能看到本地数据)
- 客户数据隔离(采购商只能看到自己的订单)
- 价格敏感数据隔离(不同层级采购商看到不同价格)
操作权限:
- 审批流程(价格调整审批、退款审批)
- 批量操作(批量上下架、批量修改价格)
- 导出权限(数据导出、报表生成)
三、技术实现方案
1. 权限模型选择
推荐采用RBAC(基于角色的访问控制)模型扩展实现:
```
用户 → 角色 → 权限组 → 具体权限
```
2. 数据库设计
```sql
-- 用户表
CREATE TABLE sys_user (
id BIGINT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(100) NOT NULL,
status TINYINT DEFAULT 1,
create_time DATETIME
);
-- 角色表
CREATE TABLE sys_role (
id BIGINT PRIMARY KEY,
role_name VARCHAR(50) NOT NULL,
role_code VARCHAR(50) NOT NULL,
description VARCHAR(200),
status TINYINT DEFAULT 1
);
-- 用户角色关联表
CREATE TABLE sys_user_role (
user_id BIGINT NOT NULL,
role_id BIGINT NOT NULL,
PRIMARY KEY (user_id, role_id)
);
-- 权限表
CREATE TABLE sys_permission (
id BIGINT PRIMARY KEY,
permission_name VARCHAR(50) NOT NULL,
permission_code VARCHAR(50) NOT NULL,
permission_type TINYINT NOT NULL COMMENT 1-菜单 2-按钮 3-API,
parent_id BIGINT,
url VARCHAR(200),
icon VARCHAR(50),
sort INT,
status TINYINT DEFAULT 1
);
-- 角色权限关联表
CREATE TABLE sys_role_permission (
role_id BIGINT NOT NULL,
permission_id BIGINT NOT NULL,
PRIMARY KEY (role_id, permission_id)
);
-- 数据权限规则表
CREATE TABLE sys_data_permission (
id BIGINT PRIMARY KEY,
permission_id BIGINT NOT NULL,
rule_type TINYINT NOT NULL COMMENT 1-区域 2-客户 3-商品类别,
rule_value VARCHAR(200) NOT NULL,
status TINYINT DEFAULT 1
);
```
3. 权限控制实现
前端控制:
- 动态菜单生成:根据用户权限动态渲染侧边栏菜单
- 按钮级权限控制:通过v-permission等指令控制按钮显示
- 路由守卫:未授权页面自动跳转403
后端控制:
- Spring Security/Shiro集成
- 注解式权限控制:@PreAuthorize("hasRole(SUPPLIER)")
- 数据权限过滤:MyBatis拦截器实现SQL动态拼接
```java
// 示例:数据权限拦截器
public class DataPermissionInterceptor implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
Object[] args = invocation.getArgs();
MappedStatement ms = (MappedStatement) args[0];
// 获取当前用户权限规则
List rules = getCurrentUserRules();
// 动态修改SQL添加数据权限条件
if (rules != null && !rules.isEmpty()) {
BoundSql boundSql = ms.getBoundSql(args[1]);
String sql = boundSql.getSql();
// 添加WHERE条件或JOIN表
sql = addDataPermission(sql, rules);
// 替换SQL
// ...
}
return invocation.proceed();
}
}
```
四、生鲜行业特殊权限考虑
1. 供应商权限特色
- 商品上下架时间控制(如凌晨不可操作)
- 价格调整审批流程(设置价格变动阈值触发审批)
- 库存预警设置权限(不同供应商可设置不同预警值)
2. 采购商权限特色
- 采购额度控制(设置月采购上限)
- 信用额度管理(根据信用等级开放不同支付方式)
- 历史价格查看权限(控制可查看的历史数据范围)
3. 冷链物流权限
- 温度监控数据查看权限(不同层级人员查看不同精度数据)
- 异常报警处理权限(司机、调度、客服不同处理权限)
- 签收权限控制(指定人员可完成签收操作)
五、实施路线图
1. 需求分析阶段(2周)
- 梳理所有用户角色及权限需求
- 绘制权限矩阵图
- 确定数据隔离规则
2. 系统设计阶段(3周)
- 设计权限数据库模型
- 规划API权限控制点
- 设计前端权限展示方案
3. 开发实现阶段(6周)
- 基础权限框架搭建
- 核心模块权限开发
- 数据权限过滤实现
4. 测试验证阶段(2周)
- 权限交叉测试
- 渗透测试
- 用户场景验证
5. 上线部署阶段(1周)
- 灰度发布策略
- 权限配置迁移
- 用户培训
六、运维与优化
1. 权限审计:
- 记录关键操作日志
- 定期生成权限使用报告
- 异常权限使用预警
2. 动态权限:
- 实现权限实时生效(无需重新登录)
- 支持临时权限授予(如节假日特殊权限)
3. 权限优化:
- 定期清理未使用权限
- 根据使用频率调整权限颗粒度
- 收集用户反馈持续优化
通过以上方案,美菜生鲜系统可以实现精细化的用户权限管理,既保障系统安全性,又提升各角色用户的工作效率,为生鲜供应链的数字化运营提供坚实基础。