
1) 【一句话结论】采用基于角色的访问控制(RBAC)模型,通过“角色-权限”绑定机制,结合数据库角色表与API权限校验,实现教师、学生、管理员三角色的权限隔离与精准控制。
2) 【原理/概念讲解】基于角色的访问控制(RBAC)是一种以“角色”为中心的权限管理模型,核心逻辑是:将权限按功能或职责分组为“角色”(如“教师”角色包含“发布作业”“批改成绩”权限,“学生”角色包含“提交作业”“查看成绩”权限),再将角色分配给用户,用户通过角色自动获得对应权限。简单类比:就像公司发工牌,不同岗位(角色)的工牌能进不同部门、做不同事(权限),用户(老师、学生)拿着对应工牌(角色),就能做对应的事。这种设计避免了为每个用户单独设置权限,实现了权限的集中管理与批量分配。
3) 【对比与适用场景】
| 模型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| RBAC | 以角色为中心,用户通过角色获得权限 | 权限与角色绑定,用户与角色关联,权限集中管理 | 需按角色划分权限的系统(如教育、企业系统) | 角色设计需合理,避免权限冗余或遗漏 |
| ACL(访问控制列表) | 以用户为中心,直接为用户分配权限 | 权限直接绑定到用户,灵活但管理复杂 | 用户数量少、权限变化频繁的场景 | 权限管理成本高,易出错 |
4) 【示例】
数据库表结构(假设):
users(用户表):id、username、password、emailroles(角色表):id、role_name(如“教师”“学生”“管理员”)、descriptionuser_roles(用户角色关联表):user_id、role_idpermissions(权限表):id、permission_name(如“发布作业”“批改成绩”)、descriptionrole_permissions(角色权限关联表):role_id、permission_idAPI权限校验流程(教师发布作业的/api/assignments/create接口):
users表获取用户id,查询user_roles表得到用户角色(如“教师”);role_permissions表,确认“教师”角色包含“发布作业”权限(permission_name='create_assignment');伪代码示例(Python风格):
def create_assignment(user_id, assignment_data):
# 1. 获取用户角色
user_role = get_user_role(user_id) # 返回角色名称,如'教师'
# 2. 校验角色权限
if not check_role_permission(user_role, 'create_assignment'):
return {"code": 403, "message": "无权限发布作业"}
# 3. 执行创建逻辑
assignment = create_assignment_in_db(assignment_data)
return {"code": 200, "data": assignment}
5) 【面试口播版答案】
面试官您好,针对历史教学系统的权限设计,我会采用基于角色的访问控制(RBAC)模型。核心思路是:先定义角色(教师、学生、管理员),再将权限(如发布作业、批改成绩)分配给角色,最后将角色分配给用户。这样,不同角色的用户自动获得对应权限,管理更清晰。具体实现上,数据库层面会设计角色表、用户角色关联表、权限表等,通过API请求时校验用户角色和权限,比如教师发布作业的API,会先检查用户是否是教师角色且有发布作业的权限,再执行操作。这样能保证教师、学生、管理员三方的权限隔离,符合系统需求。
6) 【追问清单】
7) 【常见坑/雷区】