5

我正在尝试设计一个RBAC带有扭曲的数据库(或者也许只有我认为它是扭曲的?)。据我了解RBAC,使用角色和权限来授予/拒绝对我系统中某些对象的访问。当我只有一个站点实例并简单地创建一个角色' Main admin',' Secondary admin',' User'等时,一切都很好而且清晰。

但是,如果我在系统内有帐户怎么办?所以我有一个系统,它有说' London',' Tokyo'和' Moscow'帐户。现在我将为每个帐户设置“主管理员”,以及每个帐户中的许多“用户”——当然,莫斯科人不应该能够登录伦敦帐户。我该怎么做?我是否创建了一些额外的表来将分配绑定到用户的帐户?或者我是否将 accountid 添加到 assignments 表?或者也许我应该创建多个角色,如“moscow_main_admin”、“london_main_admin”等。这种情况的最佳方法是什么?

另外我相信我会有一些用户是伦敦账户的“主要管理员”和东京账户的“次要管理员”。

我打算使用内置 RBAC 的 Yii ......如果这有什么不同的话。

如何解决?

先感谢您!

4

4 回答 4

0

您可以保留已经使用过的“管理员”角色和规则。并为每个城镇“莫斯科”、“伦敦”等添加一个新角色。在您的控制器中,在您的操作方法中调用 checkAccess,如下例所示。

public function actionEditArticle($town)
{
 if(!Yii::app()->user->checkAccess($town)
  Yii::app()->end();

 // ... more code
}

更高级的方法是在组件目录中扩展 CController,并覆盖该runAction($action)方法。

public function runAction($action)
{
    if (isset($_GET['town']) {
        if(!Yii::app()->user->checkAccess($_GET['town']) Yii::app()->end();
    }
    parent::runAction($action);
}
于 2012-03-04T08:52:38.593 回答
0

根据我对您的问题的理解,可能有两种方法可以解决您的问题。

第一种是使用分层角色(角色继承)。尽管实现和管理起来更复杂,但这可以提供非常有趣的灵活性。

第二种方法是(如果可能感兴趣的话)是我出于学术原因尝试“扩展”RBAC 时尝试过的方法。

我所做的是允许为每个角色定义两个或多个“命名”级别。因此,给定一个程序员角色,我的实现允许为角色添加级别,例如:

程序员,级别定义:

  1. “高级” = 500 级
  2. “中级” = 200 级
  3. “初级” = 0 级

因此,当有人要为规范文档等对象的实例分配权限时,可以通过以下方式分配权限:

“某些文档”->程序员(300级)->可以编辑“某些文档”->程序员(0级)->可以阅读“某些文档”->程序员(500级)->可以删除

这表明所有程序员都可以阅读该文档,但初级和中级由于缺乏“级别”权限而不允许编辑此类文档。并且只有高级程序员可以删除该文档。

这允许我通过仅创建一个角色来拥有 3 个不同级别的权限。在传统系统中,我必须创建三个不同的角色(4 个具有继承性),例如:

在非分层实现中:

  1. 高级程序员
  2. 中级程序员
  3. 初级程序员

在分层实现中:

  1. 程序员
  2. 高级程序员(扩展程序员)
  3. 中级程序员(扩展程序员)
  4. 初级程序员(扩展程序员)

显然,需要将级别正确定义为子角色。将级别定义为“分析师”是无效的,因为这是两个不同的角色,而不是子类型。

于 2015-04-18T20:57:00.380 回答
0

最适合您的要求是创建组和组层次结构。将角色分配给将间接分配给其所有子组的组。通过这种方式,您可以将公共角色分配给父组,将个人角色分配给单个组。因此,在您的情况下,伦敦、东京和莫斯科是一组。

我通过安全访问控制工具 Visual Guard 实现了这个解决方案,它已经实现并涵盖了大部分应用程序安全问题。

我已经使用 Visual Guard 对多租户和 saas 应用程序进行访问控制,其中我广泛使用了组。

点击这里阅读更多。

于 2015-08-11T09:33:30.583 回答
0

RBAC 中长期存在的问题。为决策添加上下文(例如帐户)会导致角色爆炸。这是我写的一篇文章,描述了这个问题,以及角色约束如何解决这个问题。

https://iamfortress.net/2018/07/07/towards-an-attribute-based-role-based-access-control-system/

于 2020-04-04T21:48:16.840 回答