
1) 【一句话结论】:采用基于角色的访问控制(RBAC)作为基础框架,结合细粒度策略规则(如用户-对象关联策略),通过角色分层和动态策略应用,实现学生、教师、管理员的不同权限管理,确保教师仅能查看自己带教学生的成绩。
2) 【原理/概念讲解】:老师口吻,解释核心模型。
“同学们,权限控制的核心是‘角色’和‘策略’的结合。首先,基于角色的访问控制(RBAC):把用户按角色分组,比如学生、教师、管理员,每个角色分配一组权限(如教师角色有‘查看成绩’权限)。然后,为了实现细粒度控制(比如教师只能查自己带的学生成绩),引入细粒度访问控制(DAC)的策略规则——通过定义用户与对象的关联关系(如教师-学生关系),限制权限的访问范围。打个比方,就像公司里,部门经理(角色)有查看部门所有员工数据(权限),但具体员工(用户)只能看自己的数据(细粒度),这里经理的角色权限结合员工归属关系(策略)实现精准控制。”
3) 【对比与适用场景】:
| 模型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| RBAC | 基于角色的访问控制,用户→角色→权限 | 角色固定,权限集中分配 | 角色明确、权限相对稳定的系统(如学生、教师、管理员) | 可能权限过宽,需结合策略 |
| RBAC+策略(细粒度) | 在RBAC基础上,增加基于用户-对象的策略规则 | 角色权限+策略规则(如教师-学生关联) | 需要细粒度控制(如教师仅查自己带的学生成绩) | 策略规则需动态维护 |
4) 【示例】:系统设计,用户表、角色表、权限表、用户角色关联表、策略规则表。教师A(用户ID1)属于教师角色,策略规则:教师只能查看自己带教的学生成绩。当教师A请求查看成绩时,系统先检查角色权限(教师有“查看成绩”权限),再应用策略规则(教师A的带教学生集合),过滤成绩数据返回。
伪代码示例(请求处理):
function checkPermission(user, action, object):
role = getRole(user)
if role is None: return false
# 角色权限
rolePermissions = getPermissions(role)
if action not in rolePermissions: return false
# 策略规则(细粒度)
if action == "viewGrade" and object is student:
teacherStudentRelation = getRelation(user, object)
if teacherStudentRelation is None: return false
return true
return true
5) 【面试口播版答案】:
“面试官您好,针对教育管理系统的权限管理,我设计的框架是基于角色的访问控制(RBAC)结合细粒度策略规则。首先,基础是按角色分配权限:学生角色有‘查看个人成绩’、‘提交作业’等权限;教师角色有‘查看成绩’、‘批改作业’等权限;管理员角色有‘管理用户’、‘配置权限’等权限。然后,为了实现细粒度控制(比如教师只能查自己带的学生成绩),在RBAC基础上增加基于用户-对象的关联策略。具体来说,当教师登录系统,系统先验证其‘教师’角色有‘查看成绩’的权限,接着应用策略规则:检查教师是否与该学生有‘带教’关系,只有满足关系的学生成绩才会被授权查看。这样既保证了角色权限的集中管理,又通过策略实现了细粒度的访问控制,符合不同角色的实际需求。”
6) 【追问清单】:
7) 【常见坑/雷区】: