
1) 【一句话结论】采用基于角色的访问控制(RBAC)模型,通过“用户-角色-权限”三层绑定,实现学生(查看个人记录)、教师(批改记录)、管理员(管理课程)的权限隔离,确保权限与角色关联而非直接分配给用户。
2) 【原理/概念讲解】老师口吻:咱们先理解“角色”这个核心概念,就像学校里的“岗位”——学生、教师、管理员,每个岗位有不同职责(权限)。RBAC模型就是用“角色”作为中间层,把用户和权限解耦。比如,先定义“学生”角色,给它分配“查看个人实验记录”的权限;再定义“教师”角色,分配“批改实验记录”的权限;最后定义“管理员”角色,分配“管理课程、用户”等权限。然后,用户(比如学号123的学生)被绑定到“学生”角色,系统就通过角色自动给用户“学生”权限,这样用户只能执行角色对应的操作,不会越权。简单说,就是“先定角色职责,再让用户当角色,最后角色给权限”。
3) 【对比与适用场景】
| 模型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| RBAC | 基于角色的访问控制,通过角色关联权限 | 角色作为权限分配中介,用户通过角色获得权限,权限与角色绑定 | 需按角色划分权限的场景(如实验管理系统、企业系统) | 需预先定义角色,可能存在角色冗余 |
| ABAC | 基于属性的访问控制,权限由用户属性、资源属性、环境属性动态决定 | 权限动态计算,无需预先定义角色 | 需要动态权限的场景(如根据用户权限、资源状态、时间等) | 实现复杂,计算开销大 |
4) 【示例】
以数据库表为例:
user表:id(用户ID)、username(用户名)、role_id(角色ID,外键关联role表)。role表:id(角色ID)、role_name(角色名,如“学生”“教师”“管理员”)。permission表:id(权限ID)、permission_name(权限名,如“查看个人记录”“批改记录”“管理课程”)。role_permission表:role_id(角色ID)、permission_id(权限ID)。示例流程:
role_id=1(学生角色)):系统查询role_permission表,学生角色对应“查看个人记录”权限,因此只能执行查看操作。role_id=2(教师角色)):查询到“批改记录”权限,可执行批改操作。role_id=3(管理员角色)):查询到“管理课程”“管理用户”等权限,可执行管理操作。5) 【面试口播版答案】
面试官您好,针对实验管理系统的权限控制,我会采用基于角色的访问控制(RBAC)模型。核心思路是先定义角色(学生、教师、管理员),然后为每个角色分配对应的权限(学生只能查看个人记录,教师可批改,管理员可管理课程),再将用户绑定到角色上。这样用户通过角色间接获得权限,实现权限隔离。比如学生登录后,系统根据其角色(学生)查询到对应的权限,只能执行查看操作,教师登录则获得批改权限,管理员获得管理权限。这种模型能清晰区分不同角色的职责,避免权限混乱。
6) 【追问清单】
7) 【常见坑/雷区】