前端如何实现ABAC权限控制?
我在做后台管理系统,想用ABAC模型做细粒度权限控制,但不确定前端该怎么配合。后端返回的策略是 JSON 格式,比如:
{
"role": "editor",
"resource": "article",
"action": "update",
"conditions": {
"ownerId": "currentUserId"
}
}
现在的问题是:我该在组件里直接写判断逻辑,还是封装一个权限检查函数?试过用 canUserDo('update', 'article') 这种方式,但条件里的 ownerId 怎么动态传进去啊?感觉越写越乱。
checkPermission函数,接受策略对象和当前用户的上下文信息作为参数。这样处理条件中的动态参数也会变得简单。比如:
pre class="pure-highlightjs line-numbers">
function checkPermission(policy, context) {
const { role, resource, action, conditions } = policy;
// 检查基本的 role, resource, action
if (!hasBasicPermission(role, resource, action)) {
return false;
}
// 检查条件
for (const [key, value] of Object.entries(conditions)) {
if (value === context[key]) {
continue;
}
return false;
}
return true;
}
// 使用示例
const policy = {
role: "editor",
resource: "article",
action: "update",
conditions: {
ownerId: "currentUserId"
}
};
const userContext = {
currentUserId: "123"
};
console.log(checkPermission(policy, userContext)); // 返回 true 或 false
这样每个策略的条件都可以灵活传入,逻辑也更清晰了。
组件里直接用就行,记得把当前用户ID存全局状态里。