设计一个支持关系的基于角色的访问控制系统

3
我正在为一个部分基于角色的访问控制系统设计数据库模型,但需要一些访问列表功能和关系访问。我正在构建一个Web应用程序(使用PHP和MVC架构),以管理学生、教师、职员和经理之间的交互,例如教师奖励学生或某个职员注册或删除学生。我的主要问题是: 1- 除了他们已经从他们的角色/角色继承的权限之外,为每个用户提供可选的额外权限。(=>访问列表) 2- 提供一种简单的方法来匹配某些学生到每个学期的特定学生,这意味着一个老师应该能够评分参加他教授的课程的学生,但不能评分其他班级的学生,并且这些班级变化太频繁。 (每次更改之间有2个月)。
我考虑实现标准的基于角色的系统,为每个用户添加一个额外的权限表,并在权限中添加一个作用域字段,可以选择填写另一个表的名称(这是由应用而不是数据库完成),其中包含连接的列表。例如,教师可以拥有教师控制器:“得分” - >方法“新得分” - >范围:“课程-用户”,这意味着我在“课程-用户”表中搜索教师ID和任何其他与教师共享课程ID的UserID,并允许教师为共享该课程ID的任何学生提交新成绩。这是我的模型: My Current DB Structure 这样做正确吗?我应该为每个新共享连接创建新表还是将它们全部放在一个表中?我很感激任何帮助,或者至少指向解决此问题的标准解决方案的方向。
1个回答

6
你不应该为访问控制实现一个数据库模型。你的数据库模型应该有你关心的对象(学生、教师、课程等)。其余的应该在外部化授权模型中表示为策略。这被称为基于属性的访问控制 。它也被称为基于策略的访问控制(PBAC)。不同的名称,相同的东西。
在ABAC中,一方面你有属性(你的数据库模型中的字段,例如用户名、角色、课程年份等),另一方面你有策略。例如:
- 教师可以编辑他们教的班级中学生的成绩 - 学生可以查看自己的成绩 - 一个学生可以查看他们所属班级的课程材料
所有这些都是(业务)授权策略的示例。
在ABAC中,你还有一个策略决策点(PDP)的概念,它评估授权策略,并且一个策略执行点(PEP)截获业务请求并将授权请求发送到PDP。例如:
  • 学生Alice能查看123号成绩吗?
  • 老师Bob能查看学生Alice的个人资料吗?

PDP会回复一个决定,允许或拒绝,PEP必须执行。您提到您的应用程序有一个MVC模型。您的PEP可能是控制器层中的拦截器或注释。

ABAC Architecture

市面上有几种ABAC语言和实现方法:

  • 开源:
    • 基于Rego语言的Open Policy Agent
    • 基于XACML标准的AuthZForce
  • 闭源:基于XACML和ALFA标准的Axiomatics Policy Server。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接