基于角色的访问控制,通过某些属性进行权限限制

问题描述 投票:0回答:2

每个用户拥有一个或多个角色,每个角色拥有一个或多个权限。到目前为止,我可以通过角色收集与用户关联的所有权限。

问题

某些权限有一些限制。例如:

用户可以编辑属于其网站的所有帖子,但不能编辑其他帖子。

因此“编辑帖子”权限应该有这个约束。

关于模型:如果约束与权限相关,我无法解析哪些约束对特定用户有效。

用户模型可以具有“站点”之类的属性,但并非属于一个站点的所有用户都应具有上述约束。他们中的一些人应该能够编辑所有帖子。

问题

确定哪个约束对于特定用户处于活动状态的最佳方法是什么。我是否必须将其拆分为单独的权限并将约束集成到权限模型中,或者是否有更好的解决方案?我偶然发现了基于属性的访问控制,但我不确定是否应该切换到完全不同的应用程序

任何帮助表示赞赏:)

permissions authorization rbac xacml abac
2个回答
2
投票

我之前回答过类似的问题

您希望使用与其保护的应用程序类型“不可知”的解决方案。这就是 XACML(可扩展访问控制标记语言)的目标。 XACML 提供基于属性、基于策略的访问控制(ABAC 和 PBAC)。这使您能够编写极具表现力的授权策略并在单个存储库中集中管理它们。然后,中央授权引擎(称为策略决策点或 PDP)将为您的不同应用程序提供决策。

您需要的最小属性集通常是有关用户(主题)、资源和操作的属性。 XACML 还允许您添加环境属性。这意味着您可以编写以下类型的策略:

医生可以查看他们所分配的患者的医疗记录。

    医生
  • 描述用户/主题
  • 视图
  • 描述操作
  • 医疗记录
  • 描述目标资源
  • 患者
  • 也描述了目标资源。这是有关资源的元数据
  • 他们被分配到
  • 是一个有趣的案例。它是定义医生和患者之间关系的属性。在 ABAC 中,这被实现为 doctor.id==patent.assignedDoctorId。这是使用 XACML 的主要好处之一。
  • XACML 的好处包括: - Bell 提到的外部化授权逻辑的能力 - 无需经历开发/部署生命周期即可更新授权逻辑的能力 - 能够以相同的方式为许多不同的应用程序实施细粒度授权 - 能够对授权逻辑进行可见性和审核

HTH


0
投票
rbac-laravel

© www.soinside.com 2019 - 2024. All rights reserved.