
1) 【一句话结论】采用RBAC(基于角色的访问控制)与ABAC(基于属性的访问控制)混合模型,通过角色分层绑定静态权限,结合策略引擎实现基于用户/资源/环境的动态细粒度控制。
2) 【原理/概念讲解】老师:“咱们先讲核心模型,RBAC是基础。RBAC的核心是把权限分配给角色,比如‘教师’角色有‘查看课程’、‘批改作业’等权限,然后用户(比如张老师)绑定‘教师’角色,就自动拥有这些权限。这像给角色发‘权限卡’,用户只要属于这个角色,就能用这些权限。但教育系统里细粒度需求多,比如‘张老师只能批改自己班级的作业’,这时候就需要更动态的模型——ABAC。ABAC是基于属性的,比如用户的属性(张老师,1班)、资源的属性(作业123,属于1班数学课)、环境的属性(当前是上课时间),通过规则引擎判断是否允许操作。简单说,RBAC是‘谁有卡’,ABAC是‘卡在什么情况下能用’。两者结合,既能满足静态的职责分配,又能处理动态的复杂条件。”
3) 【对比与适用场景】
| 模型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| RBAC | 基于角色的访问控制,权限分配给角色,用户绑定角色 | 静态角色,权限与角色绑定,用户通过角色继承权限 | 角色职责固定(如管理员全权限,教师仅课程相关) | 角色数量过多可能导致权限冗余 |
| ABAC | 基于属性的访问控制,通过属性(用户、资源、环境)和规则引擎动态判断 | 动态条件,支持复杂逻辑(如时间、班级、用户状态) | 需要动态权限(如学生仅课内访问资源) | 规则复杂度影响性能 |
4) 【示例】
用请求示例说明:
伪代码示例(简化):
def check_permission(user, resource, action):
# 1. RBAC检查:用户是否属于教师角色
if not is_in_role(user, "教师"):
return False
# 2. ABAC检查:用户班级是否等于资源所属班级
if user.class_id != resource.class_id:
return False
return True
5) 【面试口播版答案】
面试官您好,针对教育系统中学生、教师、管理员、家长的细粒度权限控制问题,我的核心思路是采用RBAC与ABAC混合模型。首先,RBAC作为基础,将权限按角色分层:比如管理员拥有全系统权限,教师有课程管理、作业批改等权限,学生有学习、提交作业等权限,家长有查看孩子成绩、消息等权限。然后结合ABAC实现动态细粒度控制,比如教师只能批改自己班级的作业,学生仅能在课内访问特定课程资源。具体来说,通过角色绑定静态权限,再通过策略引擎(如规则表)处理动态条件,比如时间、班级、用户状态等。举个例子,当教师张三(1班)要批改1班的作业时,系统会先检查他是否属于教师角色,再检查作业是否属于1班,满足条件则允许操作。这样既能保证权限的统一管理,又能满足教育场景的细粒度需求。
6) 【追问清单】
7) 【常见坑/雷区】