一、权限管理核心架构设计
1. RBAC模型为基础
采用基于角色的访问控制(Role-Based Access Control)模型,将权限与角色解耦,通过角色关联用户和权限:
- 用户(User):注册企业员工、供应商、采购方等。
- 角色(Role):按业务场景划分(如采购员、仓管员、财务审核员)。
- 权限(Permission):细粒度操作(如查看订单、修改价格、审批付款)。
- 关系链:用户→角色→权限,支持多角色叠加(如采购员+财务审核员)。
2. 动态权限扩展
- 数据权限:基于组织架构或业务范围限制数据访问(如某仓管员只能查看其负责仓库的库存)。
- 字段权限:控制用户对敏感字段的可见性(如供应商看不到采购方的成本价)。
- 操作权限:区分增删改查等操作(如普通用户只能查看订单,管理员可删除)。
二、业务场景化权限设计
1. 多租户隔离
- 美菜作为平台方,需为每个企业客户(租户)提供独立的数据空间,避免数据泄露。
- 技术实现:通过租户ID(Tenant ID)在数据库层面隔离数据,或采用分库分表策略。
2. 供应链角色权限
- 采购方:可查看商品目录、下单、跟踪物流,但无权修改供应商信息。
- 供应商:可管理商品库存、价格,但无法查看其他供应商数据。
- 平台管理员:拥有跨租户的全局权限(如系统配置、数据统计),需严格审计。
3. 审批流权限
- 结合工作流引擎(如Activiti),实现动态权限分配:
- 采购订单需采购经理审批后,财务才可见付款按钮。
- 价格调整需供应商和平台运营双重确认。
三、技术实现关键点
1. 权限存储与缓存
- 数据库设计:用户表、角色表、权限表、用户-角色关联表、角色-权限关联表。
- 缓存优化:使用Redis缓存用户权限数据,减少数据库查询(如`user_permissions:{userId}`)。
2. 接口权限控制
- 注解式鉴权:在Spring Boot中通过`@PreAuthorize`注解实现方法级权限控制。
```java
@PreAuthorize("hasRole(PURCHASER) && hasPermission(ORDER_VIEW)")
public Order getOrder(Long orderId) { ... }
```
- JWT令牌:在Token中嵌入角色和权限信息,减少后端查询(需权衡安全性)。
3. 前端权限渲染
- 动态菜单:根据用户权限动态生成侧边栏菜单(如Vue的`v-if`结合权限API)。
- 按钮级控制:禁用无权限按钮(如`disabled="!hasPermission(EDIT_PRICE)"`)。
四、安全与合规强化
1. 最小权限原则
- 默认拒绝所有权限,仅显式授权(如新用户注册后仅赋予基础查看权限)。
- 定期审计权限分配,回收离职人员或调岗人员的权限。
2. 操作日志与审计
- 记录所有敏感操作(如价格修改、订单删除),包括操作者、时间、IP和变更前后数据。
- 支持按用户、时间、操作类型筛选日志,满足合规审查需求。
3. 防越权攻击
- IDOR防护:禁止通过直接修改URL参数访问他人数据(如`/orders/123`需校验订单归属)。
- CSRF防护:在修改类接口中添加Token验证。
五、扩展功能设计
1. 权限模板库
- 预置常见角色模板(如“基础采购员”“高级财务”),支持一键分配。
- 允许企业自定义模板,适应不同规模客户的权限需求。
2. 临时权限
- 支持按时间范围授予权限(如“允许张三在2023-10-01至2023-10-07修改价格”)。
- 权限到期后自动回收,减少人工干预。
3. 多因素认证(MFA)
- 对高权限角色(如平台管理员)启用短信/邮箱验证码二次验证。
六、实施路径建议
1. 需求分析阶段
- 梳理所有业务角色及其操作场景,绘制权限矩阵表。
- 识别敏感数据(如支付信息、成本价),制定特殊保护策略。
2. 开发阶段
- 优先实现核心权限框架,再逐步完善细粒度控制。
- 通过单元测试和集成测试验证权限逻辑(如模拟不同角色访问接口)。
3. 上线后优化
- 收集用户反馈,调整权限分配不合理之处。
- 定期进行渗透测试,修复安全漏洞。
案例参考
- 美团快驴进货:通过“组织-角色-权限”三级体系,实现跨城市团队的权限隔离。
- 京东企业购:采用ABAC(属性基访问控制)模型,支持动态条件判断(如“仅允许查看本月订单”)。
通过以上设计,美菜生鲜系统可实现“安全可控、灵活扩展、用户体验友好”的权限管理,为B2B生鲜供应链的高效运转提供保障。