动态ABAC的好解决方案

问题描述

我正在寻找一些很好的解决方案,其中用户对资源的访问由多个可以频繁更改的属性决定。

对于像这样的规则

用户 X 必须具有属性 X.a ==(条件)和属性 X.b ==(另一个条件)

访问资源R,上面提到的a和b经常变化。

每个资源都有这个规则。

(就像只有具有 X.a ==(标准)和 X.b ==(另一个标准)的用户才能访问)

Q1) 用什么数据结构来表示这一点。

Q2) 实施策略 对于像

这样的用例
  • 列出用户可以访问的所有资源。 (查询?)
  • 在访问资源 r.X. 之前检查资格

使用示例场景详细说明上述内容。

考虑一个用户可以订阅课程的应用。

  • 完成课程将提升他们的等级(比如 1 级到 100 级)。 不活动会导致等级下降到之前的等级。

  • 课程的发布者可以指定课程仅对级别 3 的用户可用。或者4级及以上,甚至只有3级和6级等等。

  • 如果根据发布商的设置不符合资格,用户即使在列表中也不应该在任何地方看到课程。

目前我可以考虑建立从课程到级别的多对多关系(考虑到级别是固定的)。 在为用户列出课程时,我通过过滤课程关联级别和用户当前级别来查询课程。

当有多个像这样的标准时,这取决于动态数据。 例如:用户有不同类型的级别[编程级别、营销级别、财务级别])。

并且每个课程都有类似的设置

  • 编程级别 5 和标记级别 3 的用户可以访问课程 a。
  • 财务级别 4 或营销级别 3 的用户可以访问课程 b。

当编程级别 5 和营销级别 3 的用户应该看到包含课程 a 和 b 的列表时。

营销级别为 3 的用户应该只看到课程 b 的列表。

Q1 和 Q2) 就这种实现而言,最佳解决方案是什么

数据结构

查询所有符合条件的实体

检查一个实体的资格

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...