2017-06-01 26 views
0

接受相同的名字,我曾嘗試使用OACC框架多租戶的用戶/角色的持久性不是不同領域的

createResource(「用戶」,「域1」,「金」)

USER:resourceClass
domain1的:域
:將要存儲的值(外部ID)

很抱歉,如果參數順序不匹配

我再次呼籲:

createResource( 「用戶」, 「域2」, 「金」)

在這種情況下,系統衝突存儲相同的名稱,邏輯上是,externalId不能相同。

但是我們怎樣才能將真正的值存儲到這個中,一個普通的資源實例化將導致它自己的ID。

如果我傳入用戶名,是否有任何「getRoles」api?
多租戶應用程序將有(用戶/角色/權限)每個域,1個用戶可以存在於多個域!

+0

因爲我沒有必要的聲譽,我無法標記oacc。感謝有人可以編輯和標記oacc。 – peaceUser

回答

1

但是我們怎樣才能將真正的值存儲到這個中,一個普通的資源實例化將導致它自己的ID。

正如你注意到的,createResource()方法可以接受一個String externalId參數,它必須爲新資源全球唯一字符串標識。這裏的「全球唯一」意味着在所有領域和資源類別中都是唯一的。 externalId可用於通過應用程序域中的標識符引用OACC資源,而無需使用或存儲唯一的OACC生成並從createResource()返回。

將非唯一應用程序域標識符用作外部ID的一種方法是將標識符與適當的分類器前綴在OACC中使其唯一。這樣的前綴可以簡單地由資源類,域或兩者組成。要使用你的例子:

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

是否有任何的API來「getRoles」如果我通過一個用戶名?

在OACC可以模型角色分配具有一個資源通過授予它*INHERIT許可「繼承」從另一資源的所有權限。換句話說,OACC中沒有明確的角色概念,因此沒有專門的「getRoles」方法。

在任何情況下,授權的最佳做法是根據權限對進行檢查,而不是針對角色成員身份。

爲了審計或管理目的,如果您確實需要查找特定用戶繼承權限的資源,OACC提供了查詢方法,如getResourcesByResourcePermissions()。如果,例如,你的所有的「角色」爲藍本,爲資源類ROLE的資源,你可以找到你的用戶通過以下調用繼承者:

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