ABAC 核心思想与模型
ABAC 的决策过程可抽象为:
PDP (Policy Decision Point) ↑ Request → (User Attributes, Resource Attributes, Environment) → Permit / Deny ↓ PEP (Policy Enforcement Point)
- PDP(策略决策点):负责执行策略并返回决策结果。
- PEP(策略执行点):在业务代码中拦截请求,调用 PDP 并执行其决策。
- 策略(Policy):以规则形式定义访问条件,通常采用 JSON、XML 或专用语言(如 ALFA、Rego)编写。
📌 示例策略(自然语言):
'若user.department == resource.ownerDepartment且user.level >= 'MANAGER',则允许访问。'
二、典型错误示例:硬编码策略逻辑
❌ 错误做法
许多团队在尝试 ABAC 时,初期常将策略逻辑直接写入业务代码:
// OrderService.java
public void viewOrder(User user, Order order) {
if (!user.getDepartment().equals(order.getOwnerDepartment())) {
throw new AccessDeniedException("部门不匹配");
}
if (getLevelValue(user.getLevel()) < getLevelValue("MANAGER")) {
throw new AccessDeniedException("职级不足");
}
// ... 执行业务逻辑
}
private int getLevelValue(String level) {
Map<String, Integer> levels = Map.of("STAFF", 1, "SENIOR", 2, "MANAGER", 3, "DIRECTOR", 4);
return levels.getOrDefault(level, 0);
}


