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

RBAC API

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

参照

global variable 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 deletees a user. ユーザーが存在しない場合は、false を返します(別名、影響されません)。

例:

e.DeleteUser("alice")

DeleteRole()

DeleteRole はロールを削除します。

例:

e.DeleteRole("data2_admin")

DeletePermission()

DeletePermission deletees a permission. パーミッションが存在しない場合は 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"].
しかしGetImplicitUseForRole("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 という名前のポリシーにより、ユーザーやロールに対する暗黙的な権限を取得します GetImplicitPermissionsForUser() と比較して、この関数はポリシー名を指定することができます。

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

GetImplicitPermissionsForUser("alice")のみが取得されます: [["admin", "data1", "read"], そのポリシーはデフォルト "p"

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

例:

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

GetDomainsForUser()

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

For example: 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") could get ["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") は [[alice data1 read] [alice data2 read] [alice data2 write]] を返します

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

GetImplicitUsersForPermission()

GetImplicitUsersForPermission gets implicit users for a permission.

For example:

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

GetImplicitUsersForPermission("data1", "read") will return: ["alice", "bob"].

Note: only users will be returned, roles (2nd arg in "g") will be excluded.

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

GetAllowedObjectConditions()

GetAllowedObjectConditions returns a string array of object conditions that the user can access.

For example:

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.") will return ["price < 25", "category_id = 2"], nil

Note:

  1. prefix: You can customize the prefix of the object conditions, and "r.obj." is commonly used as a prefix. After removing the prefix, the remaining part is the condition of the object. If there is an obj policy that does not meet the prefix requirement, an errors.ERR_OBJ_CONDITION will be returned.

  2. If the 'objectConditions' array is empty, return errors.ERR_EMPTY_CONDITION This error is returned because some data adapters' ORM return full table data by default when they receive an empty condition, which tends to behave contrary to expectations.(e.g. GORM) If you are using an adapter that does not behave like this, you can choose to ignore this error.

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

GetImplicitUsersForResource()

GetImplicitUsersForResource return implicit user based on resource.

For example:

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

GetImplicitUsersForResource("data2") will return [["bob", "data2", "write"], ["alice", "data2", "read"] ["alice", "data2", "write"]], nil.

GetImplicitUsersForResource("data1") will return [["alice", "data1", "read"]], nil.

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

Only users will be returned, roles (2nd arg in "g") will be excluded.