如何根据实体类型授予权限?

Posted

技术标签:

【中文标题】如何根据实体类型授予权限?【英文标题】:How can I give permissions based on entity type? 【发布时间】:2019-04-02 11:29:08 【问题描述】:

我正在尝试根据 Orion 将要保存的实体类型设置权限。由于权限与“端点”相关联,因此我尝试将其设置为端点 /entities?type=Truck (例如)。问题是它告诉我(Keyrock 通过 PEP 响应)用户未在应用程序中获得授权。 我查看了数据库中的所有连接,在我看来,他已获得授权、具有他的角色、他的权限和他指定的组织,所有这些都在已创建的唯一应用程序中。

在本教程中,POST 请求会出现类似的情况,但这是因为在消息正文中发送了实体类型。在 GET 的情况下,我看不太清楚,因为它在 URL 中,但尝试这个没有奏效。

是否有可能不应该以这种方式完成?这种权限应该如何创建?

【问题讨论】:

您好 Cristina,策略定义目前不支持查询。我们正在努力支持他们,所以我希望它会尽快推出。 【参考方案1】:

为此使用 Authzforce 似乎有点矫枉过正,但您可以使用 string-starts-withstring-at-least-one-member-of 条件,例如:

<Target>
  <AnyOf>
     <AllOf>
        <Match MatchId="urn:oasis:names:tc:xacml:1.0:function:string-equal">
           <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">GET</AttributeValue>
           <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:action" AttributeId="urn:oasis:names:tc:xacml:1.0:action:action-id" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true" />
       </Match>
    </AllOf>
  </AnyOf>
</Target>
 <Condition>
   <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of">
      <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">/v2/entities?type=Car</AttributeValue>
         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">/v2/entities?type=Truck</AttributeValue>
         <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">/v2/entities?type=Bicycle</AttributeValue>
      </Apply>
      <AttributeDesignator Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" AttributeId="urn:thales:xacml:2.0:resource:sub-resource-id" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true" />
   </Apply>
</Condition>

&lt;target&gt; 检查 GET HTTP 动词,&lt;condition&gt; 确保 - 资源 URL 将匹配 TruckCarBicycle

【讨论】:

以上是关于如何根据实体类型授予权限?的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2:如何获取标记有“编辑”ACL 权限的一种类型的所有实体?

代码生成器是啥?如何根据数据库去产生实体类?

如何根据实体类生成对应的.hbm.xml文件?

ASP.Net 分层应用程序 - 在层之间共享实体数据模型

如何创建此实体命名查询

Entity Framework Core 是如何根据实体类生成模型的?