当前位置: 首页 > 面试题库 >

Yii RBAC:访问特定项目/行

叶坚
2023-03-14
问题内容

我有一个用例,我需要为用户分配编辑高度动态项目的权限,该项目可能有成百上千个。每个用户( 属于相同类型或组
)必须分配给其中一些项目(并且不同的用户可以访问相同的 Company Items
)。此外,这些物品的数量会迅速增加或消失。这些项目与用户没有内在联系,但必须任意分配给他们。

让我们称这些项目为 公司项目

因此,我希望能够将 公司项目
分配给用户,并动态撤消该访问权限。然后,在控制器内部使用这些分配来检查是否可以执行某些操作…从概念上讲,问题始终相同:测试用户是否有权访问表(
公司项目 表)中的特定项目/行。

我的想法是使用yii
RBAC系统,同时尝试 使授权树保持静态 ,从而避免每次创建或删除 公司项目
时创建/删除角色或任务。相反,我想知道是否可以使用中的$data参数assign($itemName, $userId, $bizRule, $data)和类似于以下内容的树来执行此操作:

  • adminUser :角色
    • companyAdmin :角色
    • editCompanyItemRole* :与角色 bizrule ; bizrule 通过简单地检查内部是否存在来测试对 公司项目 的访问;在分配时间,应该会收到一个包含 公司项目 ID的数组,应允许用户对其进行编辑! $params['companyItemId']``$data['companyItemsAllowed']``$data *
      • editItem :操作;用于检查控制器中的访问权限,并应提供 公司物品 ID,以希望对照该用户进行检查,例如,Yii::app()->user->checkAccess('editItem', array('companyItemId' => 666));

这样,每当我们需要将用户分配更改为 Company Items时
,我们唯一需要做的就是更改$data['companyItemsAllowed']原始分配内的数组。 角色总是一样的!

问题:

  1. 这个系统可以用 ,我可以这样使用Yii的RBAC系统 吗?
  2. 假设我们有成千上万的 公司物料 ,并且可能为每个用户分配了数十个 公司物料 ,这是否是满足要求的理想方式 为什么 ??

问题答案:

我决定采取以下方法,决定简单地维持后 公司项目的数组 里面$data['companyItemsAllowed']不是
最好的以下要求:

  • Users和之间创建了一个关联表CompanyItems; 称呼它association_table;
  • 如问题所示创建了RBAC树,但其中的内容bizRule类似于以下内容:
    $ret = Yii::app()->dbConnection->createCommand('SELECT EXISTS(SELECT 1 FROM `association_table` WHERE user_id=:userId AND company_item_id=:companyItemId)')
    

    ->queryScalar(array(‘:userId’ => $params[‘userId’], ‘companyItemId’ => $params[‘companyItemId’]));
    return $ret;

这使我可以 维护访问控制界面 ,如下所示:

    Yii::app()->user->checkAccess('editItem', array('companyItemId' => 666));

(回想一下, 我们不需要userId$params数组上继续传递!。)

当然 ,这将实际分配 公司项目 的权限与 RBAC
系统分开了:我editCompanyItemRole使用Yii提供的RBAC机制分配了一些用户,但是每个实际项目必须通过在association_table…上插入一行来单独分配。

因此,尽管首先想到的是在内部维护一系列
公司项目$data可能会起作用,但我认为这是最好且更灵活的方法。而且,关于的一般想法bizRule似乎可行。



 类似资料:
  • 我有2个与firestore的firebase项目,让我们称他们为A和B,他们都有自己的web客户端。现在A web客户机需要读取B firestore数据库,所以我需要允许A客户机在B的某些集合下对firestore执行某些操作。是否有一种方法可以在使用firestore规则的同时使用B中A的身份验证数据来允许此类操作?。是否有一种方法可以将auth令牌从a链接到B中允许它们?。 任何机制都行得

  • 问题内容: 我有一个像这样的json块: 我如何获取此令牌包含的所有关键项目。例如,从上面的代码中,我希望具有“ ADRESS_LOCATION”,“ LOCATION”,“ FLOOR_NUMBER”和“ self”。 问题答案: 您可以将转换为,然后使用方法获取对象属性的列表。从那里,您可以轻松获得名称。 像这样: 输出:

  • 本文向大家介绍详解Springboot+React项目跨域访问问题,包括了详解Springboot+React项目跨域访问问题的使用技巧和注意事项,需要的朋友参考一下 一、开发环境 框架:springboot 1.5.10.RELEASE 开发工具:IDEA JDK:1.8 前端框架:React 15.6.1 浏览器:Chrome浏览器 二、跨域问题 本地使用ajax访问localhost:808

  • 问题内容: 我是Python和Django的新手。我目前正在探索使用Scrapy抓取网站并将数据保存到Django数据库。我的目标是根据用户提供的域来运行蜘蛛。 我写了一个Spider来提取我需要的数据,并在调用时将其正确存储在json文件中 如刮板教程中所述。 我现在的目标是使Spider成功地将数据保存到Django数据库,然后根据用户输入来使Spider运行。 我知道与此主题相关的帖子很多,

  • 我正在尝试通过我的android应用程序访问特定帐户的google drive。此外,我还可以使用google选项登录,这样用户就可以通过google登录应用程序,这将是play services使用的google帐户。 但是,我想在特定的google drive帐户上存储一些文件,比如说

  • 使用指南 - 统计设置 - 统计规则设置 - 排除特定IP的访问流量 如果您不希望统计来自某个特定IP地址下的流量,可以在“管理”->“统计规则设置”->“排除规则设置”中设置要排除的IP地址,使得报告数据中不包含该IP地址下的流量,如公司内网IP。 您可以批量排除IP,如:202.120.45.8-202.120.45.79