设计基于角色的访问控制并支持关系

Designing a role based access control with support for relations

我正在为部分基于角色但确实需要一些访问列表功能和关系访问的访问控制系统设计数据库模型。

我正在为学校构建一个 Web 应用程序(如果重要的话使用 PHP 和 MVC 架构)来管理学生、教师、员工和经理的互动,例如教师奖励学生或其中之一招收或开除学生的工作人员。我的主要问题是我被要求: 1- 为每个用户提供可选的额外权限,而不是他们已经从 role/roles 继承的权限。 (=>访问列表) 2- 提供一种简单的方法,将每个学期的某些学生与某些学生相匹配,这意味着一位老师应该能够为参加 class 他教的学生打分,而不是其他 class 的其他学生,并且这 class 更改过于频繁(每次更改之间间隔 2 个月)。

我正在考虑实施一个标准的基于角色的系统,添加一个额外的 table 用于每个用户的额外权限和一个名为范围的权限中的额外字段,可以选择用另一个 [=26] 的名称填充=](这是由应用程序而不是数据库完成的),其中包含一个连接列表。例如,教师可以有教师控制器:'scoring' -> 方法 'new score' -> 范围:'course-user' 这意味着我在 'course-user' table 中搜索教师 ID 和具有相同课程 ID 的任何其他用户 ID,并允许教师为与教师共享课程 ID 的任何学生提交新分数。这是我的模型:

这是正确的方法吗?我应该为每个新的共享连接创建新的 table 还是将它们全部放在一个 table 中?感谢任何帮助或至少是针对此问题的标准解决方案的指导。

您不应该为访问控制实施数据库模型。您的数据库模型应该包含您关心的对象(学生、教师、classes...)。其余部分应表示为 外部授权 模型中的策略。这称为 基于属性的访问控制 。它也称为基于策略的访问控制 (PBAC)。不同的名字,一样的东西。

在 ABAC 中,一方面有属性(数据库模型中表的字段,例如用户名、角色、课程年份...),另一方面有策略。例如:

  • 教师可以在 class 他们教的
  • 中编辑学生的成绩
  • 学生可以查看自己的成绩
  • 学生可以查看他们所属class
  • 的课程material

所有这些都是(业务)授权策略的示例。

在 ABAC 中,您有评估授权策略的策略决策点 (PDP) 和拦截业务请求并将授权请求发送到 PDP 的策略执行点 (PEP) 的概念。例如:

  • 学生 Alice 可以查看成绩 #123 吗?
  • 老师 Bob 可以查看学生 Alice 的个人资料吗?

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

有几种 ABAC 语言和实现:

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