メインコンテンツにスキップ

RBAC API

RBAC向けのよりフレンドリーなAPI。 このAPIはManagement APIのサブセットです。 RBACユーザーはこのAPIを使用してコードを簡素化できます。

参考資料

グローバル変数 e はEnforcerインスタンスです。

e, err := NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")

GetRolesForUser()

GetRolesForUserは、ユーザーが持っている役割を取得します。

例えば:

res := e.GetRolesForUser("alice")

GetUsersForRole()

GetUsersForRoleは、役割を持っているユーザーを取得します。

例えば:

res := e.GetUsersForRole("data1_admin")

HasRoleForUser()

HasRoleForUserは、ユーザーが役割を持っているかどうかを判定します。

例えば:

res := e.HasRoleForUser("alice", "data1_admin")

AddRoleForUser()

AddRoleForUserは、ユーザーに役割を追加します。 ユーザーが既にその役割を持っている場合はfalseを返します(つまり、影響を受けません)。

例えば:

e.AddRoleForUser("alice", "data2_admin")

AddRolesForUser()

AddRolesForUserは、ユーザーに複数の役割を追加します。 ユーザーが既にこれらの役割のいずれかを持っている場合はfalseを返します(つまり、影響を受けません)。

例えば:

var roles = []string{"data2_admin", "data1_admin"}
e.AddRolesForUser("alice", roles)

DeleteRoleForUser()

DeleteRoleForUserは、ユーザーの役割を削除します。 ユーザーがその役割を持っていない場合はfalseを返します(つまり、影響を受けません)。

例えば:

e.DeleteRoleForUser("alice", "data1_admin")

DeleteRolesForUser()

DeleteRolesForUserはユーザーのすべての役割を削除します。 ユーザーが役割を持っていない場合(つまり影響を受けない場合)、falseを返します。

例えば:

e.DeleteRolesForUser("alice")

DeleteUser()

DeleteUserはユーザーを削除します。 ユーザーが存在しない場合(つまり影響を受けない場合)、falseを返します。

例えば:

e.DeleteUser("alice")

DeleteRole()

DeleteRoleは役割を削除します。

例えば:

e.DeleteRole("data2_admin")

DeletePermission()

DeletePermissionは権限を削除します。 権限が存在しない場合はfalseを返します(つまり、影響を受けません)。

例えば:

e.DeletePermission("read")

AddPermissionForUser()

AddPermissionForUserはユーザーまたは役割に権限を追加します。 ユーザーまたは役割が既にその権限を持っている場合はfalseを返します(つまり、影響を受けません)。

例えば:

e.AddPermissionForUser("bob", "read")

AddPermissionsForUser()

AddPermissionsForUserは、ユーザーまたはロールに複数の権限を追加します。 ユーザーまたはロールが既にいずれかの権限を持っている場合、falseを返します(つまり、影響を受けません)。

例えば:

var permissions = [][]string{{"data1", "read"},{"data2","write"}}
for i := 0; i < len(permissions); i++ {
e.AddPermissionsForUser("alice", permissions[i])
}

DeletePermissionForUser()

DeletePermissionForUserは、ユーザーまたはロールの権限を削除します。 ユーザーまたはロールがその権限を持っていない場合、falseを返します(つまり、影響を受けません)。

例えば:

e.DeletePermissionForUser("bob", "read")

DeletePermissionsForUser()

DeletePermissionsForUserは、ユーザーまたはロールの権限を削除します。 ユーザーまたはロールに権限がない場合(つまり、影響を受けていない場合)はfalseを返します。

例えば:

e.DeletePermissionsForUser("bob")

GetPermissionsForUser()

GetPermissionsForUserは、ユーザーまたはロールの権限を取得します。

例えば:

e.GetPermissionsForUser("bob")

HasPermissionForUser()

HasPermissionForUserは、ユーザーが権限を持っているかどうかを判断します。

例えば:

e.HasPermissionForUser("alice", []string{"read"})

GetImplicitRolesForUser()

GetImplicitRolesForUserは、ユーザーが持っている暗黙的なロールを取得します。 GetRolesForUser() と比較して、この関数は直接の役割に加えて間接的な役割も取得します。

例えば:

g, alice, role:admin  
g, role:admin, role:user

GetRolesForUser("alice") は以下のみを取得できます: ["role:admin"]。\ しかし、GetImplicitRolesForUser("alice") は以下を取得します: ["role:admin", "role:user"]

例えば:

e.GetImplicitRolesForUser("alice")

GetImplicitUsersForRole()

GetImplicitUsersForRole はその役割を継承するすべてのユーザーを取得します。 GetUsersForRole() と比較して、この関数は間接的なユーザーを取得します。

例えば:

g, alice, role:admin  
g, role:admin, role:user

GetUsersForRole("role:user") は以下のみを取得できます: ["role:admin"]。\ しかし、GetImplicitUesrsForRole("role:user")は以下を取得します: ["role:admin", "alice"]

例えば:

users := e.GetImplicitUsersForRole("role:user")

GetImplicitPermissionsForUser()

GetImplicitPermissionsForUserは、ユーザーまたはロールの暗黙的な権限を取得します。\ GetPermissionsForUser()と比較して、この関数は継承されたロールの権限を取得します。

例えば:

p, admin, data1, read  
p, alice, data2, read
g, alice, admin

GetPermissionsForUser("alice")は以下のみを取得できます: [["alice", "data2", "read"]]。\ しかし、GetImplicitPermissionsForUser("alice")は以下を取得します: [["admin", "data1", "read"], ["alice", "data2", "read"]]。

例えば:

e.GetImplicitPermissionsForUser("alice")

GetNamedImplicitPermissionsForUser()

GetNamedImplicitPermissionsForUserは、名前付きポリシーによってユーザーまたはロールの暗黙的な権限を取得します。

例えば:

p, admin, data1, read
p2, admin, create
g, alice, admin

GetImplicitPermissionsForUser("alice")は、デフォルトのポリシー"p"によってのみ取得できます: [["admin", "data1", "read"]]

しかし、ポリシーを"p2"と指定することで、GetNamedImplicitPermissionsForUser("p2", "alice")によって[["admin", "create"]]を取得できます。

例えば:

e.GetNamedImplicitPermissionsForUser("p2","alice")

GetDomainsForUser()

GetDomainsForUserは、ユーザーが持っているすべてのドメインを取得します。

例えば:

p, admin, domain1, data1, read
p, admin, domain2, data2, read
p, admin, domain2, data2, write
g, alice, admin, domain1
g, alice, admin, domain2

GetDomainsForUser("alice")は、["domain1", "domain2"]を取得できます。

例えば:

result, err := e.GetDomainsForUser("alice")

GetImplicitResourcesForUser()

GetImplicitResourcesForUserは、ユーザーに対して真であるべきすべてのポリシーを返します。

例えば:

p, alice, data1, read
p, bob, data2, write
p, data2_admin, data2, read
p, data2_admin, data2, write

g, alice, data2_admin

GetImplicitResourcesForUser("alice")は以下を返します

resources, err := e.GetImplicitResourcesForUser("alice")

GetImplicitUsersForPermission()

GetImplicitUsersForPermissionは、パーミッションに対する暗黙的なユーザーを取得します。

例えば:

p, admin, data1, read
p, bob, data1, read
g, alice, admin

GetImplicitUsersForPermission("data1", "read")は以下を返します: ["alice", "bob"].

注意: ユーザーのみが返されます、ロール("g"の2番目の引数)は除外されます。

users, err := e.GetImplicitUsersForPermission("data1", "read")

GetAllowedObjectConditions()

GetAllowedObjectConditionsは、ユーザーがアクセスできるオブジェクト条件の文字列配列を返します。

例えば:

p, alice, r.obj.price < 25, read
p, admin, r.obj.category_id = 2, read
p, bob, r.obj.author = bob, write

g, alice, admin

e.GetAllowedObjectConditions("alice", "read", "r.obj.") は ["price < 25", "category_id = 2"], nil を返します。

注意:

  1. プレフィックス:オブジェクト条件のプレフィックスをカスタマイズできます。"r.obj." は一般的にプレフィックスとして使用されます。 プレフィックスを削除した後の残りの部分がオブジェクトの条件です。 プレフィックス要件を満たさないオブジェクトポリシーがある場合、errors.ERR_OBJ_CONDITION が返されます。

  2. 'objectConditions' 配列が空の場合、errors.ERR_EMPTY_CONDITION が返されます。

conditions, err := e.GetAllowedObjectConditions("alice", "read", "r.obj.")

GetImplicitUsersForResource()

GetImplicitUsersForResourceは、リソースに基づいて暗黙的なユーザーを返します。

例えば:

p, alice, data1, read
p, bob, data2, write
p, data2_admin, data2, read
p, data2_admin, data2, write
g, alice, data2_admin

GetImplicitUsersForResource("data2")は、[["bob", "data2", "write"], ["alice", "data2", "read"] ["alice", "data2", "write"]], nilを返します。

GetImplicitUsersForResource("data1")は、[["alice", "data1", "read"]], nilを返します。

ImplicitUsers, err := e.GetImplicitUsersForResource("data2")
メモ

ユーザーのみが返され、ロール("g"の2番目の引数)は除外されます。