多租户用户/角色持续不接受不同域中的相同名称

时间:2017-06-01 09:04:17

标签: java security

我曾尝试使用OACC框架

  

createResource(“USER”,“domain1”,“kim”)

USER :resourceClass
domain1 :域
kim :要存储的值(externalId)

很抱歉,如果参数订单不匹配

我再次呼吁:

  

createResource(“USER”,“domain2”,“kim”)

在这种情况下,系统冲突存储相同的名称,逻辑上是,externalId不能相同
但是我们如何将实际值存储到此中,正常的Resource实例化将导致其自己的ID。

如果我传入UserName,是否有“getRoles”的api?
多租户应用程序每个域都有(用户/角色/权限),1个用户可以存在多个域!!

1 个答案:

答案 0 :(得分:1)

  

但是我们如何将真实值存储到此中,正常的Resource实例化将导致其自己的ID。

正如您所注意到的,createResource()方法可以接受String externalId参数,该参数必须是新资源的全局唯一字符串标识符。 "全球独一无二"这意味着所有域和资源类都是唯一的。 externalId对于通过应用程序域中的标识引用OACC资源非常有用,无需使用或存储唯一的resourceId OACC生成并从createResource()返回。

将非唯一应用程序域标识符用作外部ID的一种方法是使用适当的分类器为标识符添加前缀,以使其在OACC中唯一。这样的前缀可以简单地由资源类,域或两者组成。要使用您的示例:

createResource("USER", "domain1", "user.domain1.kim");
createResource("USER", "domain2", "user.domain2.kim");
  

是否有任何api to" getRoles"如果我传入UserName?

在OACC中,您可以通过使用一个资源"继承"来模型角色分配。通过授予*INHERIT权限,来自其他资源的所有权限。换句话说,OACC中没有显式角色概念,因此没有专门的方法来获取" getRoles"。

在任何情况下,授权的最佳做法是检查权限,而不是针对角色成员身份。

出于审计或管理目的,如果您确实需要查找特定用户从中继承权限的资源,OACC会提供查询方法,例如getResourcesByResourcePermissions()。例如,如果你所有的角色"被建模为资源类ROLE的资源,您可以通过以下调用找到您的用户继承的资源:

getResourcesByResourcePermissions(userResource, 
                                  "ROLE", 
                                  ResourcePermissions
                                    .getInstance(ResourcePermissions.INHERIT));