一、权限细分原则
1. 最小权限原则
每个角色仅授予完成工作所需的最小权限,避免权限滥用。例如:
- 采购员仅能查看/编辑供应商信息和采购订单,无法修改财务数据。
- 仓库管理员仅能操作库存管理模块,无权访问用户订单详情。
2. 职责分离原则
关键操作需由不同角色协同完成,防止单点风险。例如:
- 订单创建与审批分离(业务员创建,主管审批)。
- 财务收款与退款操作分离(收银员收款,财务主管审核退款)。
3. 数据隔离原则
按业务区域、部门或客户维度隔离数据。例如:
- 区域经理仅能看到本区域仓库的库存数据。
- 合作商户只能访问自身订单和结算信息。
4. 动态权限调整
支持根据用户角色变更、业务场景变化(如促销期临时提权)动态调整权限。
二、具体权限细分设计
1. 角色划分与权限矩阵
| 角色 | 模块权限 |
|------------------|-----------------------------------------------------------------------------|
| 超级管理员 | 全系统配置、角色管理、审计日志查看 |
| 采购管理员 | 供应商管理、采购计划制定、采购订单审批 |
| 仓储管理员 | 库存入库/出库、盘点、库存预警设置 |
| 物流专员 | 配送路线规划、司机调度、运输状态更新 |
| 财务专员 | 账单生成、对账、支付审核、发票管理 |
| 商户端用户 | 商品浏览、下单、订单跟踪、账户余额查询 |
| 数据分析师 | 销售数据报表查看、用户行为分析(无修改权限) |
2. 权限粒度控制
- 功能级权限:按钮级控制(如“删除”按钮仅对管理员可见)。
- 数据级权限:通过字段过滤实现(如区域经理只能看到本区域数据)。
- 时间级权限:临时权限(如促销期开放特定商品编辑权限)。
- 设备级权限:限制移动端/PC端操作范围(如移动端仅能查看,PC端可编辑)。
三、技术实现方案
1. RBAC模型(基于角色的访问控制)
- 定义角色(Role)、权限(Permission)、用户(User)三要素。
- 通过角色关联权限,用户分配角色实现权限继承。
- 示例:`用户A → 角色“采购员” → 权限“查看供应商列表”`。
2. ABAC模型(基于属性的访问控制)
- 结合用户属性(部门、职级)、资源属性(数据敏感度)、环境属性(时间、地点)动态决策权限。
- 示例:`仅当用户职级≥主管且在办公时间,允许访问财务报表`。
3. 权限中间件设计
- 在API层或路由层嵌入权限校验逻辑,统一拦截非法请求。
- 示例:
```javascript
// 伪代码:检查用户是否有“编辑订单”权限
function checkPermission(userId, action) {
const userRoles = getUserRoles(userId);
const permissions = getPermissionsByRoles(userRoles);
return permissions.includes(action);
}
```
4. 审计日志与操作追溯
- 记录所有敏感操作(如删除、修改价格),包括操作者、时间、IP地址。
- 支持按角色、时间范围筛选日志,便于事后审计。
四、注意事项
1. 权限冲突处理
- 明确优先级规则(如角色A与角色B的权限冲突时,以更高权限角色为准)。
- 避免权限继承导致的“权限膨胀”(如子角色继承父角色所有权限)。
2. 性能优化
- 对高频查询的权限数据(如用户菜单)做缓存(Redis)。
- 避免每次请求都查询数据库,可采用JWT令牌中嵌入权限信息。
3. 用户体验平衡
- 权限提示友好化:拒绝访问时返回明确原因(如“您无权编辑此订单”)。
- 提供权限申请流程:用户可通过工单系统申请临时权限。
4. 合规性要求
- 符合GDPR、等保2.0等法规对数据访问控制的要求。
- 敏感操作(如导出用户数据)需二次验证(短信验证码、审批流程)。
五、案例参考
- 美团买菜:通过“商户角色+区域权限”实现全国数千供应商的精细化管理。
- 盒马鲜生:采用“动态权限+设备指纹”技术,防止内部人员通过移动端泄露数据。
- 每日优鲜:在促销期通过ABAC模型临时开放“价格修改”权限给区域运营,活动结束后自动回收。
通过以上设计,美菜生鲜系统可实现“安全可控、灵活高效”的权限管理,支撑生鲜电商复杂业务场景下的合规运营与用户体验优化。