一、多账号管理的核心需求
1. 角色分层
- 超级管理员:拥有系统全局权限(如账号创建、权限分配、数据备份)。
- 区域管理员:管理特定区域(如城市、仓库)的账号和数据。
- 普通员工:仅能操作自身业务范围(如订单处理、库存查询)。
- 财务/审计角色:访问财务数据,但无修改权限。
2. 权限控制粒度
- 功能级权限:如“订单修改”“价格调整”“库存盘点”等独立开关。
- 数据级权限:按区域、品类、客户分组限制数据可见性(如A仓库员工看不到B仓库库存)。
- 时间级权限:临时授权(如促销期间开放价格修改权限)。
3. 操作审计
- 记录所有账号的操作日志(如谁在何时修改了商品价格)。
- 支持按账号、时间、操作类型筛选日志,便于追溯问题。
二、万象源码部署的权限设计
万象(假设为开源生鲜系统)的源码部署需结合以下技术实现权限分明:
1. 数据库设计
- 用户表(user):存储账号基础信息(ID、用户名、密码、状态)。
- 角色表(role):定义角色类型(如“仓库管理员”)。
- 权限表(permission):枚举所有可授权功能(如“order:edit”)。
- 角色-权限关联表(role_permission):建立角色与权限的映射。
- 用户-角色关联表(user_role):为用户分配角色。
示例SQL:
```sql
CREATE TABLE user (id INT PRIMARY KEY, username VARCHAR(50), password VARCHAR(100), status TINYINT);
CREATE TABLE role (id INT PRIMARY KEY, name VARCHAR(50));
CREATE TABLE permission (id INT PRIMARY KEY, code VARCHAR(50), description VARCHAR(200));
CREATE TABLE role_permission (role_id INT, permission_id INT, FOREIGN KEY (role_id) REFERENCES role(id), FOREIGN KEY (permission_id) REFERENCES permission(id));
CREATE TABLE user_role (user_id INT, role_id INT, FOREIGN KEY (user_id) REFERENCES user(id), FOREIGN KEY (role_id) REFERENCES role(id));
```
2. 后端权限控制
- 基于注解的权限拦截(如Spring Security):
```java
@PreAuthorize("hasAuthority(order:edit)")
@PostMapping("/order/update")
public ResponseEntity<?> updateOrder(@RequestBody OrderDto order) {
// 业务逻辑
}
```
- 动态数据过滤:根据用户角色自动过滤数据(如仅返回当前仓库的订单)。
3. 前端权限控制
- 菜单动态渲染:根据用户权限显示/隐藏菜单项。
- 按钮级禁用:无权限的按钮置灰或隐藏(如“删除”按钮)。
三、部署方案与安全加固
1. 容器化部署
- 使用Docker隔离不同环境(开发、测试、生产),避免权限混淆。
- 示例`docker-compose.yml`片段:
```yaml
services:
app:
image: my-fresh-system:latest
environment:
- SPRING_PROFILES_ACTIVE=prod
- DB_URL=jdbc:mysql://db:3306/fresh_db
ports:
- "8080:8080"
```
2. 数据库权限分离
- 为应用账号分配最小必要权限(如仅允许SELECT/UPDATE特定表)。
- 避免使用`root`账号连接数据库。
3. 网络隔离
- 内部服务通过内网IP访问,对外暴露API网关。
- 使用VPN或零信任网络架构限制远程访问。
4. 定期审计与轮换
- 每月检查账号权限是否与职责匹配。
- 每季度强制修改高权限账号密码。
四、实际案例:生鲜连锁企业的权限设计
- 场景:某企业有10个仓库,每个仓库需独立管理库存和订单。
- 解决方案:
1. 创建角色“仓库管理员”,分配权限:
- 库存查询(`inventory:view`)
- 库存修改(`inventory:edit`)
- 订单处理(`order:process`)
2. 为每个仓库创建独立账号,绑定至对应区域角色。
3. 前端根据账号区域过滤数据(如A仓库管理员看不到B仓库库存)。
五、总结
| 维度 | 关键点 |
|----------------|-----------------------------------------------------------------------------|
| 账号管理 | 角色分层、权限粒度控制、操作审计 |
| 源码部署 | 数据库设计(多对多关系)、后端注解拦截、前端动态渲染 |
| 安全加固 | 容器化隔离、数据库最小权限、网络隔离、定期审计 |
通过上述设计,生鲜系统可实现“按需授权、操作留痕、数据隔离”,满足生鲜行业对效率和安全的双重需求。实际部署时需结合企业规模调整权限复杂度,避免过度设计。