RBAC API
Более дружественный API для RBAC. Этот 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");
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");
GetImplicitUsersForRole()
GetImplicitUsersForRole получает всех пользователей, наследующих роль. По сравнению с GetUsersForRole(), эта функция извлекает косвенных пользователей.
Например:
g, alice, role:admin
g, role:admin, role:user
GetUsersForRole("role:user") может получить только: ["role:admin"].\ Но GetImplicitUesrsForRole("role:user") вернет: ["role:admin", "alice"].
Например:
- 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", чтобы получить: [["admin", "create"]] с помощью GetNamedImplicitPermissionsForUser("p2","alice")
Например:
- 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 получает неявных пользователей для разрешения.
Например:
p, admin, data1, read
p, bob, data1, read
g, alice, admin
GetImplicitUsersForPermission("data1", "read") вернет: "alice", "bob"
.
Примечание: будут возвращены только пользователи, роли (2-й аргумент в "g") будут исключены.
- Go
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
Примечание:
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 возвращает неявного пользователя на основе ресурса.
Например:
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")
Будут возвращены только пользователи, роли (2-й аргумент в "g") будут исключены.