RBAC API
RBAC에 대한 더 친숙한 API. 이 API는 Management API의 하위 집합입니다. RBAC 사용자는 이 API를 사용하여 코드를 단순화할 수 있습니다.
참조
전역 변수 e
는 Enforcer 인스턴스입니다.
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e, err := NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")
const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv')
$e = new Enforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv');
e = casbin.Enforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")
var e = new Enforcer("path/to/model.conf", "path/to/policy.csv");
let mut e = Enforcer::new("examples/rbac_model.conf", "examples/rbac_policy.csv").await?;
Enforcer e = new Enforcer("examples/rbac_model.conf", "examples/rbac_policy.csv");
GetRolesForUser()
GetRolesForUser는 사용자가 가진 역할을 가져옵니다.
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
res := e.GetRolesForUser("alice")
const res = await e.getRolesForUser('alice')
$res = $e->getRolesForUser("alice");
roles = e.get_roles_for_user("alice")
var res = e.GetRolesForUser("alice");
let roles = e.get_roles_for_user("alice", None); // No domain
List<String> res = e.getRolesForUser("alice");
GetUsersForRole()
GetUsersForRole은 역할을 가진 사용자를 가져옵니다.
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
res := e.GetUsersForRole("data1_admin")
const res = await e.getUsersForRole('data1_admin')
$res = $e->getUsersForRole("data1_admin");
users = e.get_users_for_role("data1_admin")
var res = e.GetUsersForRole("data1_admin");
let users = e.get_users_for_role("data1_admin", None); // No domain
List<String> res = e.getUsersForRole("data1_admin");
HasRoleForUser()
HasRoleForUser는 사용자가 역할을 가지고 있는지 확인합니다.
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
res := e.HasRoleForUser("alice", "data1_admin")
const res = await e.hasRoleForUser('alice', 'data1_admin')
$res = $e->hasRoleForUser("alice", "data1_admin");
has = e.has_role_for_user("alice", "data1_admin")
var res = e.HasRoleForUser("alice", "data1_admin");
let has = e.has_role_for_user("alice", "data1_admin", None); // No domain
boolean res = e.hasRoleForUser("alice", "data1_admin");
AddRoleForUser()
AddRoleForUser는 사용자에게 역할을 추가합니다. 사용자가 이미 역할을 가지고 있다면 false를 반환합니다 (즉, 영향을 받지 않음).
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.AddRoleForUser("alice", "data2_admin")
await e.addRoleForUser('alice', 'data2_admin')
$e->addRoleForUser("alice", "data2_admin");
e.add_role_for_user("alice", "data2_admin")
var added = e.AddRoleForUser("alice", "data2_admin");
or
var added = await e.AddRoleForUserAsync("alice", "data2_admin");
let added = e.add_role_for_user("alice", "data2_admin", None).await?; // No domain
boolean added = e.addRoleForUser("alice", "data2_admin");
AddRolesForUser()
AddRolesForUser는 사용자에게 여러 역할을 추가합니다. 사용자가 이미 이러한 역할 중 하나를 가지고 있다면 false를 반환합니다 (즉, 영향을 받지 않음).
예를 들어:
- Go
- Node.js
- Rust
var roles = []string{"data2_admin", "data1_admin"}
e.AddRolesForUser("alice", roles)
const roles = ["data1_admin", "data2_admin"];
roles.map((role) => e.addRoleForUser("alice", role));
let roles = vec!["data1_admin".to_owned(), "data2_admin".to_owned()];
let all_added = e.add_roles_for_user("alice", roles, None).await?; // No domain
DeleteRoleForUser()
DeleteRoleForUser는 사용자의 역할을 삭제합니다. 사용자가 역할을 가지고 있지 않다면 false를 반환합니다 (즉, 영향을 받지 않음).
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.DeleteRoleForUser("alice", "data1_admin")
await e.deleteRoleForUser('alice', 'data1_admin')
$e->deleteRoleForUser("alice", "data1_admin");
e.delete_role_for_user("alice", "data1_admin")
var deleted = e.DeleteRoleForUser("alice", "data1_admin");
or
var deleted = await e.DeleteRoleForUser("alice", "data1_admin");
let deleted = e.delete_role_for_user("alice", "data1_admin", None).await?; // No domain
boolean deleted = e.deleteRoleForUser("alice", "data1_admin");
DeleteRolesForUser()
DeleteRolesForUser는 사용자의 모든 역할을 삭제합니다. 사용자가 어떤 역할도 가지고 있지 않다면 false를 반환합니다 (즉, 영향을 받지 않음).
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.DeleteRolesForUser("alice")
await e.deleteRolesForUser('alice')
$e->deleteRolesForUser("alice");
e.delete_roles_for_user("alice")
var deletedAtLeastOne = e.DeleteRolesForUser("alice");
or
var deletedAtLeastOne = await e.DeleteRolesForUserAsync("alice");
let deleted_at_least_one = e.delete_roles_for_user("alice", None).await?; // No domain
boolean deletedAtLeastOne = e.deleteRolesForUser("alice");
DeleteUser()
DeleteUser는 사용자를 삭제합니다. 사용자가 존재하지 않는 경우 false를 반환합니다 (즉, 영향을 받지 않음).
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.DeleteUser("alice")
await e.deleteUser('alice')
$e->deleteUser("alice");
e.delete_user("alice")
var deleted = e.DeleteUser("alice");
or
var deleted = await e.DeleteUserAsync("alice");
let deleted = e.delete_user("alice").await?;
boolean deleted = e.deleteUser("alice");
DeleteRole()
DeleteRole은 역할을 삭제합니다.
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.DeleteRole("data2_admin")
await e.deleteRole("data2_admin")
$e->deleteRole("data2_admin");
e.delete_role("data2_admin")
var deleted = e.DeleteRole("data2_admin");
or
var deleted = await e.DeleteRoleAsync("data2_admin");
let deleted = e.delete_role("data2_admin").await?;
e.deleteRole("data2_admin");
DeletePermission()
DeletePermission은 권한을 삭제합니다. 권한이 존재하지 않는 경우 (즉, 영향을 받지 않음) false를 반환합니다.
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.DeletePermission("read")
await e.deletePermission('read')
$e->deletePermission("read");
e.delete_permission("read")
var deleted = e.DeletePermission("read");
or
var deleted = await e.DeletePermissionAsync("read");
let deleted = e.delete_permission(vec!["read".to_owned()]).await?;
boolean deleted = e.deletePermission("read");
AddPermissionForUser()
AddPermissionForUser는 사용자 또는 역할에 대한 권한을 추가합니다. 사용자 또는 역할이 이미 권한을 가지고 있는 경우 (즉, 영향을 받지 않음) false를 반환합니다.
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.AddPermissionForUser("bob", "read")
await e.addPermissionForUser('bob', 'read')
$e->addPermissionForUser("bob", "read");
e.add_permission_for_user("bob", "read")
var added = e.AddPermissionForUser("bob", "read");
or
var added = await e.AddPermissionForUserAsync("bob", "read");
let added = e.add_permission_for_user("bob", vec!["read".to_owned()]).await?;
boolean added = e.addPermissionForUser("bob", "read");
AddPermissionsForUser()
AddPermissionsForUser는 사용자 또는 역할에 대해 여러 권한을 추가합니다. 사용자 또는 역할이 이미 권한 중 하나를 가지고 있는 경우 (즉, 영향을 받지 않음) false를 반환합니다.
예를 들어:
- Go
- Node.js
- Rust
var permissions = [][]string{{"data1", "read"},{"data2","write"}}
for i := 0; i < len(permissions); i++ {
e.AddPermissionsForUser("alice", permissions[i])
}
const permissions = [
["data1", "read"],
["data2", "write"],
];
permissions.map((permission) => e.addPermissionForUser("bob", ...permission));
let permissions = vec![
vec!["data1".to_owned(), "read".to_owned()],
vec!["data2".to_owned(), "write".to_owned()],
];
let all_added = e.add_permissions_for_user("bob", permissions).await?;
DeletePermissionForUser()
DeletePermissionForUser는 사용자 또는 역할에 대한 권한을 삭제합니다. 사용자 또는 역할이 권한을 가지고 있지 않은 경우 (즉, 영향을 받지 않음) false를 반환합니다.
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.DeletePermissionForUser("bob", "read")
await e.deletePermissionForUser("bob", "read")
$e->deletePermissionForUser("bob", "read");
e.delete_permission_for_user("bob", "read")
var deleted = e.DeletePermissionForUser("bob", "read");
or
var deleted = await e.DeletePermissionForUserAsync("bob", "read");
let deleted = e.delete_permission_for_user("bob", vec!["read".to_owned()]).await?;
boolean deleted = e.deletePermissionForUser("bob", "read");
DeletePermissionsForUser()
DeletePermissionsForUser는 사용자 또는 역할에 대한 권한을 삭제합니다. 사용자 또는 역할이 어떤 권한도 가지고 있지 않은 경우 (즉, 영향을 받지 않음) false를 반환합니다.
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.DeletePermissionsForUser("bob")
await e.deletePermissionsForUser('bob')
$e->deletePermissionsForUser("bob");
e.delete_permissions_for_user("bob")
var deletedAtLeastOne = e.DeletePermissionsForUser("bob");
or
var deletedAtLeastOne = await e.DeletePermissionsForUserAsync("bob");
let deleted_at_least_one = e.delete_permissions_for_user("bob").await?;
boolean deletedAtLeastOne = e.deletePermissionForUser("bob");
GetPermissionsForUser()
GetPermissionsForUser는 사용자 또는 역할에 대한 권한을 가져옵니다.
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Java
e.GetPermissionsForUser("bob")
await e.getPermissionsForUser('bob')
$e->getPermissionsForUser("bob");
e.get_permissions_for_user("bob")
var permissions = e.GetPermissionsForUser("bob");
List<List<String>> permissions = e.getPermissionsForUser("bob");
GetNamedPermissionsForUser()
GetNamedPermissionsForUser gets permissions for a user or role by named policy.
예를 들어:
p, alice, data1, read
p, bob, data2, write
p2, admin, create
g, alice, admin
GetNamedPermissionsForUser("p", "alice") will return [["alice", "data1", "read"]]
.
GetNamedPermissionsForUser("p2", "alice") will return [["admin", "create"]]
.
- Go
- Python
permissions, err := e.GetNamedPermissionsForUser("p", "alice")
permissions = e.get_named_permissions_for_user("p", "alice")
HasPermissionForUser()
HasPermissionForUser는 사용자가 권한을 가지고 있는지 확인합니다.
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.HasPermissionForUser("alice", []string{"read"})
await e.hasPermissionForUser('alice', 'read')
$e->hasPermissionForUser("alice", []string{"read"});
has = e.has_permission_for_user("alice", "read")
var has = e.HasPermissionForUser("bob", "read");
let has = e.has_permission_for_user("alice", vec!["data1".to_owned(), "read".to_owned()]);
boolean has = e.hasPermissionForUser("alice", "read");
GetImplicitRolesForUser()
GetImplicitRolesForUser는 사용자가 가진 암시적 역할을 가져옵니다. GetRolesForUser()와 비교하여, 이 함수는 직접적인 역할 외에 간접적인 역할을 검색합니다.
예를 들어:
g, alice, role:admin
g, role:admin, role:user
GetRolesForUser("alice")는 오직: ["role:admin"]만 가져올 수 있습니다.\ 하지만 GetImplicitRolesForUser("alice")는: ["role:admin", "role:user"]를 가져올 것입니다.
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.GetImplicitRolesForUser("alice")
await e.getImplicitRolesForUser("alice")
$e->getImplicitRolesForUser("alice");
e.get_implicit_roles_for_user("alice")
var implicitRoles = e.GetImplicitRolesForUser("alice");
e.get_implicit_roles_for_user("alice", None); // No domain
List<String> implicitRoles = e.getImplicitRolesForUser("alice");
GetNamedImplicitRolesForUser()
GetNamedImplicitRolesForUser gets implicit roles that a user has by named policy.
예를 들어:
g, alice, admin
g, admin, super_admin
g2, alice, user
g2, user, guest
GetNamedImplicitRolesForUser("g", "alice") will return ["admin", "super_admin"]
.
GetNamedImplicitRolesForUser("g2", "alice") will return ["user", "guest"]
.
- Go
- Python
roles, err := e.GetNamedImplicitRolesForUser("g", "alice")
roles = e.get_named_implicit_roles_for_user("g", "alice")
GetImplicitUsersForRole()
GetImplicitUsersForRole은 역할을 상속받는 모든 사용자를 가져옵니다. GetUsersForRole()와 비교하여, 이 함수는 간접적인 사용자를 검색합니다.
For example:
g, alice, role:admin
g, role:admin, role:user
GetUsersForRole("role:user")는 오직: ["role:admin"]만 가져올 수 있습니다.\ 하지만 GetImplicitUesrsForRole("role:user")는 다음을 얻을 것입니다: ["role:admin", "alice"].
For example:
- Go
- Node.js
- Java
users := e.GetImplicitUsersForRole("role:user")
const users = e.getImplicitUsersForRole("role:user");
List<String> 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"]].
예를 들어:
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
e.GetImplicitPermissionsForUser("alice")
await e.getImplicitPermissionsForUser("alice")
$e->getImplicitPermissionsForUser("alice");
e.get_implicit_permissions_for_user("alice")
var implicitPermissions = e.GetImplicitPermissionsForUser("alice");
e.get_implicit_permissions_for_user("alice", None); // No domain
List<List<String>> implicitPermissions = e.getImplicitPermissionsForUser("alice");
GetNamedImplicitPermissionsForUser()
GetNamedImplicitPermissionsForUser는 명명된 정책에 의해 사용자 또는 역할에 대한 암시적 권한을 가져옵니다. GetImplicitPermissionsForUser()에 비해 이 함수는 정책 이름을 지정할 수 있게 해줍니다.
예를 들어:
p, admin, data1, read
p2, admin, create
g, alice, admin
GetImplicitPermissionsForUser("alice")는 오직 다음을 얻을 수 있습니다: [["admin", "data1", "read"]], 이는 기본적으로 "p" 정책입니다
하지만 정책을 "p2"로 지정하여 GetNamedImplicitPermissionsForUser("p2","alice")로 다음을 얻을 수 있습니다: [["admin", "create"]].
예를 들어:
- Go
- Python
e.GetNamedImplicitPermissionsForUser("p2","alice")
e.get_named_implicit_permissions_for_user("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"]를 얻을 수 있습니다.
예를 들어:
- Go
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]]
- Go
resources, err := e.GetImplicitResourcesForUser("alice")
GetImplicitUsersForPermission()
GetImplicitUsersForPermission은 권한에 대한 암시적 사용자를 가져옵니다.
For example:
p, admin, data1, read
p, bob, data1, read
g, alice, admin
GetImplicitUsersForPermission("data1", "read")는 다음을 반환할 것입니다: ["alice", "bob"]
.
참고: 오직 사용자만 반환되며, 역할("g"의 2번째 인수)은 제외됩니다.
- Go
users, err := e.GetImplicitUsersForPermission("data1", "read")
GetImplicitObjectPatternsForUser()
GetImplicitObjectPatternsForUser returns all object patterns (with wildcards) that a user has for a given domain and action.
For example:
p, admin, chronicle/123, location/*, read
p, user, chronicle/456, location/789, read
g, alice, admin
g, bob, user
GetImplicitObjectPatternsForUser("alice", "chronicle/123", "read") will return ["location/*"]
.
GetImplicitObjectPatternsForUser("bob", "chronicle/456", "read") will return ["location/789"]
.
- Go
- Node.js
- PHP
- Python
- .NET
- Rust
- Java
patterns, err := e.GetImplicitObjectPatternsForUser("alice", "chronicle/123", "read")
const patterns = await e.getImplicitObjectPatternsForUser("alice", "chronicle/123", "read")
$patterns = $e->getImplicitObjectPatternsForUser("alice", "chronicle/123", "read");
patterns = e.get_implicit_object_patterns_for_user("alice", "chronicle/123", "read")
var patterns = e.GetImplicitObjectPatternsForUser("alice", "chronicle/123", "read");
let patterns = e.get_implicit_object_patterns_for_user("alice", "chronicle/123", "read").await?;
List<String> patterns = e.getImplicitObjectPatternsForUser("alice", "chronicle/123", "read");
GetAllowedObjectConditions()
GetAllowedObjectConditions는 사용자가 접근할 수 있는 객체 조건의 문자열 배열을 반환합니다.
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.") 다음을 반환할 것입니다: ["price < 25", "category_id = 2"], nil
참고:
prefix: 객체 조건의 접두사를 사용자 정의할 수 있으며, "r.obj."가 일반적으로 접두사로 사용됩니다. 접두사를 제거한 후 남은 부분은 객체의 조건입니다. 접두사 요구사항을 충족하지 않는 obj 정책이 있으면
errors.ERR_OBJ_CONDITION
이 반환됩니다.'objectConditions' 배열이 비어 있으면
errors.ERR_EMPTY_CONDITION
을 반환합니다. 이 오류는 일부 데이터 어댑터의 ORM이 비어 있는 조건을 받으면 기본적으로 전체 테이블 데이터를 반환하기 때문에 반환됩니다. 이는 기대와는 반대로 동작하는 경향이 있습니다.(예: GORM) 이와 같이 동작하지 않는 어댑터를 사용하고 있다면 이 오류를 무시할 수 있습니다.
- Go
conditions, err := e.GetAllowedObjectConditions("alice", "read", "r.obj.")
GetImplicitUsersForResource()
GetImplicitUsersForResource는 리소스를 기반으로 한 암시적 사용자를 반환합니다.
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")는 ["bob", "data2", "write"], ["alice", "data2", "read"] ["alice", "data2", "write"]], nil
을 반환합니다.
GetImplicitUsersForResource("data1")는 ["alice", "data1", "read"]], nil
을 반환합니다.
- Go
ImplicitUsers, err := e.GetImplicitUsersForResource("data2")
사용자만 반환되며, 역할("g"의 2번째 인수)은 제외됩니다.
GetNamedImplicitUsersForResource()
GetNamedImplicitUsersForResource return implicit user based on resource with named policy support. This function handles resource role relationships through named policies (e.g., g2, g3, etc.).
For example:
p, admin_group, admin_data, *
g, admin, admin_group
g2, app, admin_data
GetNamedImplicitUsersForResource("g2", "app") will return users who have access to admin_data through g2 relationship.
- Go
ImplicitUsers, err := e.GetNamedImplicitUsersForResource("g2", "app")