一、权限模型设计:RBAC+动态扩展
1. 基础RBAC模型
- 角色(Role):按业务职能划分(如采购员、仓库管理员、财务审核员、系统管理员)。
- 权限(Permission):细粒度操作权限(如“创建采购单”“修改库存”“审批付款”)。
- 用户-角色-权限关系:用户通过角色继承权限,支持多角色叠加(如“区域经理”同时拥有“查看报表”和“审批采购”权限)。
2. 动态权限扩展
- 数据权限:基于组织架构或业务范围过滤数据(如“仅查看自己负责的仓库库存”)。
- 字段级权限:控制用户对表单字段的读写(如“采购员不可修改供应商价格”)。
- 操作条件权限:结合业务状态限制操作(如“仅当订单状态为‘待审核’时可修改”)。
3. 权限继承与委托
- 支持角色层级继承(如“总部管理员”继承“区域管理员”权限)。
- 临时权限委托(如“主管可临时授权下属审批紧急订单”)。
二、技术实现方案
1. 后端权限控制
- API网关层:通过JWT或OAuth2.0校验Token中的角色信息,拦截无权访问的接口。
- 服务层:使用注解(如Spring Security的`@PreAuthorize`)或AOP切面实现方法级权限校验。
- 数据库层:通过视图或行级安全策略(如PostgreSQL的RLS)限制数据查询范围。
2. 前端权限控制
- 路由级控制:动态生成菜单树,隐藏无权访问的路由(如Vue Router的`meta.roles`)。
- 组件级控制:通过指令(如`v-permission`)隐藏按钮或表单字段。
- 数据掩码:对敏感字段(如供应商联系方式)显示部分信息(如“1381234”)。
3. 权限审计与日志
- 记录所有权限变更操作(如“用户A被分配角色B”)。
- 审计关键操作日志(如“采购单修改记录”),支持按用户、时间、操作类型检索。
三、功能模块权限细化
1. 采购管理模块
- 采购员:创建采购单、提交审批、查看历史订单。
- 采购主管:审批采购单、调整采购预算、查看区域采购数据。
- 系统管理员:配置供应商白名单、修改采购流程规则。
2. 库存管理模块
- 仓库管理员:入库/出库操作、盘点库存、调整库存数量(需审批)。
- 物流主管:查看跨仓库调拨记录、调度运输资源。
- 财务人员:核对库存成本、生成库存报表(仅读权限)。
3. 财务管理模块
- 出纳:处理付款申请、生成付款凭证。
- 会计:审核付款凭证、记账、生成财务报表。
- 审计员:查看所有财务流水、导出审计报告。
4. 数据分析模块
- 区域经理:查看本区域销售数据、库存周转率。
- 高管:查看全公司KPI、跨区域对比分析。
- 数据分析师:导出原始数据、自定义报表(需审批)。
四、安全与合规考虑
1. 最小权限原则:默认拒绝所有权限,仅显式授权。
2. 权限回收机制:离职用户自动禁用账号,角色变更时实时更新权限。
3. 多因素认证:对高风险操作(如修改供应商信息)要求二次验证(如短信验证码)。
4. 合规性支持:符合GDPR、等保2.0等法规要求,支持数据脱敏和操作留痕。
五、实施步骤
1. 需求分析:与业务部门确认角色职责和权限边界。
2. 模型设计:绘制ER图定义角色、权限、数据范围关系。
3. 开发测试:单元测试覆盖权限校验逻辑,集成测试模拟多角色协同场景。
4. 上线培训:提供权限管理后台操作手册,培训管理员配置权限。
5. 迭代优化:根据用户反馈调整权限颗粒度(如新增“库存预警设置”权限)。
六、示例代码(Spring Security)
```java
// 定义权限枚举
public enum Permission {
PURCHASE_CREATE("采购单创建"),
PURCHASE_APPROVE("采购单审批"),
INVENTORY_ADJUST("库存调整");
// ...
}
// 自定义注解实现方法级权限控制
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasAuthority(PURCHASE_APPROVE)")
public @interface RequirePurchaseApprove {}
// 控制器示例
@RestController
@RequestMapping("/api/purchase")
public class PurchaseController {
@PostMapping
@RequirePurchaseCreate
public ResponseEntity<?> createOrder() {
// 仅采购员可访问
}
@PutMapping("/{id}/approve")
@RequirePurchaseApprove
public ResponseEntity<?> approveOrder(@PathVariable Long id) {
// 仅采购主管可访问
}
}
```
通过上述方案,快驴生鲜系统可实现“按人定岗、按岗定权、按权限操作”的精细化管控,平衡业务灵活性与安全性。