【问题标题】:Advanced targeting like Facebook Sharings (Flexible ACL) DB Design高级定位,如 Facebook 共享(灵活 ACL)数据库设计
【发布时间】:2016-01-12 13:56:12
【问题描述】:

我一直在尝试为我们公司开发一个内部员工门户。有部门、职位等级、工作区域、角色(用户、编辑、管理员、超级管理员等)和特殊组(执行官等)进行用户分组。

用户必须有一个(只有一个)部门。 用户必须有一个(只有一个)工作等级。 用户必须在至少一个区域工作。 用户必须有一个(只有一个)角色。 用户可能有一个或多个特殊组。

工作等级和角色是分层的(一个等级或角色可以继承另一个等级或角色),但其他的不是。

用户将只看到允许的菜单并访问允许的路线。

用户还将在发布新内容时选择哪些用户可以查看它。 例如: 组合 1:(IT 或财务部门)和(工作等级是 9、10、11 之一)和(区域是 1、5、8 之一)和(专属特殊组是 1、5、8 之一)除了用户id=1 组合2:(HR部门)和(工作等级为11)和user_id=3,4,5

组合可以通过 AND/OR 相互关联,如组合 1 AND 组合 2

所以,会有很多内容,每个内容都有不同的组权限。我尝试创建一个数据库模式,但很难获得登录用户可见的所有内容。序列化数据对于在 db 中保存组合集很有用,但对于序列化数据来说似乎是不可能的。在这个问题上使用 MongoDB 有优势吗?我怎样才能在表中保存组/用户权限的组合?

我研究了很多 ACL 和 RBAC 示例,但找不到最佳解决方案。请帮忙。

顺便说一句,我使用 Laravel 框架。

谢谢。

【问题讨论】:

标签: mysql database grouping acl rbac


【解决方案1】:

您需要研究基于属性的访问控制 (ABAC - Wikipedia) 和可扩展访问控制标记语言 (XACML)。 NIST(美国国家科学与技术研究院)在这里对ABAC 进行了很好的介绍。

XACML 将使您能够表达使用您的属性的细粒度访问控制策略。在您的问题中,您有:

  • 用户属性
    • 部门
    • 工作等级
    • 工作区
    • 角色
  • 对象(资源)属性
    • 内容类型
    • 内容位置
    • 内容分类

使用 XACML,您可以编写如下规则:

等级==1 的用户可以对类型==post 的内容执行操作==编辑 如果 content.department==user.department.

您可以拥有任意数量的规则,包括冲突规则或环境规则(在上午 9 点之前拒绝访问)。

查看 Eclipse 的 ALFA 插件以编写您自己的策略 (Wikipedia | Download)。

HTH, 大卫

【讨论】:

  • 非常感谢。不幸的是,ABAC 没有任何 PHP&MySQL 实现。所以,我无法想象如何创建数据库模式和编写查询。 ://
  • 看看 PHP Slim 和 MySQL FGAC
猜你喜欢
  • 2012-01-27
  • 2018-02-25
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多