# 管理 API
提供對Casbin策略管理完全支持的基本API。
## 參考
全局變量`e`是執行者實例。
Go
~~~go
e := NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")
~~~
Node.js
~~~javascript
const e = await newEnforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv')
~~~
PHP
~~~php
$e = new Enforcer('examples/rbac_model.conf', 'examples/rbac_policy.csv');
~~~
### `GetAllSubjects()`
GetAllSubjects 獲取當前策略中顯示的主題列表。
For example:
Go
~~~go
allSubjects := e.GetAllSubjects()
~~~
Node.js
~~~javas
const allSubjects = e.getAllSubjects()
~~~
PHP
```php
$allSubjects = $e->getAllSubjects();
```
### `GetAllNamedSubjects()`
GetAllNamedSubjects 獲取當前命名策略中顯示的主題列表。
For example:
Go
```go
allNamedSubjects := e.GetAllNamedSubjects("p")
```
Node.js
```javascript
const allNamedSubjects = e.getAllNamedSubjects('p')
```
PHP
```php
$allNamedSubjects = $e->getAllNamedSubjects("p");
```
### `GetAllObjects()`
GetAllObjects 獲取當前策略中顯示的對象列表。
例如:
Go
```go
allObjects := e.GetAllObjects()
```
Node.js
```javascript
const allObjects = e.getAllObjects()
```
PHP
```php
$allObjects = $e->getAllObjects();
```
### `GetAllNamedObjects()`
GetAllNamedObjects 獲取當前命名策略中顯示的對象列表。
例如:
Go
```go
allNamedObjects := e.GetAllNamedObjects("p")
```
Node.js
```javas
const allNamedObjects = e.getAllNamedObjects('p')
```
PHP
```php
$allNamedObjects = $e->getAllNamedObjects("p");
```
### `GetAllActions()`
GetAllActions 獲取當前策略中顯示的操作列表。
例如:
Go
```go
allActions := e.GetAllActions()
```
Node.js
```javas
const allActions = e.getAllActions()
```
PHP
```php
$allActions = $e->getAllActions();
```
### `GetAllNamedActions()`
GetAllNamedActions 獲取當前命名策略中顯示的操作列表。
例如:
Go
```go
allNamedActions := e.GetAllNamedActions("p")
```
Node.js
```javas
const allNamedActions = e.getAllNamedActions('p')
```
PHP
```php
$allNamedActions = $e->getAllNamedActions("p");
```
### `GetAllRoles()`
GetAllRoles獲取當前策略中顯示的角色列表。
例如:
Go
```go
allRoles = e.GetAllRoles()
```
Node.js
```javas
const allRoles = e.getAllRoles()
```
PHP
```php
$allRoles = $e->getAllRoles();
```
### `GetAllNamedRoles()`
GetAllNamedRoles 獲取當前命名策略中顯示的角色列表。
例如:
Go
```go
allNamedRoles := e.GetAllNamedRoles("g")
```
Node.js
```javas
const allNamedRoles = e.getAllNamedRoles('g')
```
PHP
```php
$allNamedRoles = $e->getAllNamedRoles('g');
```
### `GetPolicy()`
GetPolicy 獲取策略中的所有授權規則。
例如:
Go
```go
policy = e.GetPolicy()
```
Node.js
```javas
const policy = e.getPolicy()
```
PHP
```php
$policy = $e->getPolicy();
```
### `GetFilteredPolicy()`
GetFilteredPolicy 獲取策略中的所有授權規則,可以指定字段篩選器。
例如:
Go
```go
filteredPolicy := e.GetFilteredPolicy(0, "alice")
```
Node.js
```javas
const filteredPolicy = e.getFilteredPolicy(0, 'alice')
```
PHP
```php
$filteredPolicy = $e->getFilteredPolicy(0, "alice");
```
### `GetNamedPolicy()`
GetNamedPolicy 獲取命名策略中的所有授權規則。
例如:
Go
```go
namedPolicy := e.GetNamedPolicy("p")
```
Node.js
```javas
const namedPolicy = e.getNamedPolicy('p')
```
PHP
```php
$namedPolicy = $e->getNamedPolicy("p");
```
### `GetFilteredNamedPolicy()`
GetFilteredNamedPolicy 獲取命名策略中的所有授權規則,可以指定字段過濾器。
例如:
Go
```go
filteredNamedPolicy = e.GetFilteredNamedPolicy("p", 0, "bob")
```
Node.js
```javas
const filteredNamedPolicy = e.getFilteredNamedPolicy('p', 0, 'bob')
```
PHP
```php
$filteredNamedPolicy = $e->getFilteredNamedPolicy("p", 0, "bob");
```
### `GetGroupingPolicy()`
GetGroupingPolicy 獲取策略中的所有角色繼承規則。
例如:
Go
```go
groupingPolicy := e.GetGroupingPolicy()
```
Node.js
```javas
const groupingPolicy = e.getGroupingPolicy()
```
PHP
```php
$groupingPolicy = $e->getGroupingPolicy();
```
### `GetFilteredGroupingPolicy()`
GetFilteredGroupingPolicy 獲取策略中的所有角色繼承規則,可以指定字段篩選器。
例如:
Go
```go
filteredGroupingPolicy := e.GetFilteredGroupingPolicy(0, "alice")
```
Node.js
```javas
const filteredGroupingPolicy = e.getFilteredGroupingPolicy(0, 'alice')
```
PHP
```php
$filteredGroupingPolicy = $e->getFilteredGroupingPolicy(0, "alice");
```
### `GetNamedGroupingPolicy()`
GetNamedGroupingPolicy 獲取策略中的所有角色繼承規則。
例如:
Go
```go
namedGroupingPolicy := e.GetNamedGroupingPolicy("g")
```
Node.js
```javas
const namedGroupingPolicy = e.getNamedGroupingPolicy('g')
```
PHP
```php
$namedGroupingPolicy = $e->getNamedGroupingPolicy("g");
```
### `GetFilteredNamedGroupingPolicy()`
GetFilteredNamedGroupingPolicy 獲取策略中的所有角色繼承規則。
例如:
Go
```go
namedGroupingPolicy := e.GetFilteredNamedGroupingPolicy("g", 0, "alice")
```
Node.js
```javas
const namedGroupingPolicy = e.getFilteredNamedGroupingPolicy('g', 0, 'alice')
```
PHP
```php
$namedGroupingPolicy = $e->getFilteredNamedGroupingPolicy("g", 0, "alice");
```
### `HasPolicy()`
HasPolicy 確定是否存在授權規則。
例如:
Go
```go
hasPolicy := e.HasPolicy("data2_admin", "data2", "read")
```
Node.js
```javas
const hasPolicy = e.hasPolicy('data2_admin', 'data2', 'read')
```
PHP
```php
$hasPolicy = $e->hasPolicy('data2_admin', 'data2', 'read');
```
### `HasNamedPolicy()`
HasNamedPolicy 確定是否存在命名授權規則。
例如:
Go
```go
hasNamedPolicy := e.HasNamedPolicy("p", "data2_admin", "data2", "read")
```
Node.js
```javas
const hasNamedPolicy = e.hasNamedPolicy('p', 'data2_admin', 'data2', 'read')
```
PHP
```php
$hasNamedPolicy = $e->hasNamedPolicy("p", "data2_admin", "data2", "read");
```
### `AddPolicy()`
AddPolicy 向當前策略添加授權規則。 如果規則已經存在,函數返回false,并且不會添加規則。 否則,函數通過添加新規則并返回true。
例如:
Go
```go
added := e.AddPolicy("eve", "data3", "read")
```
Node.js
```javas
const p = ['eve', 'data3', 'read']
const added = await e.addPolicy(...p)
```
PHP
```php
$added = $e->addPolicy('eve', 'data3', 'read');
```
### `AddNamedPolicy()`
AddNamedPolicy 向當前命名策略添加授權規則。 如果規則已經存在,函數返回false,并且不會添加規則。 否則,函數通過添加新規則并返回true。
例如:
Go
```go
added := e.AddNamedPolicy("p", "eve", "data3", "read")
```
Node.js
```javas
const p = ['eve', 'data3', 'read']
const added = await e.addNamedPolicy('p', ...p)
```
PHP
```php
$added = $e->addNamedPolicy("p", "eve", "data3", "read");
```
### `RemovePolicy()`
RemovePolicy 從當前策略中刪除授權規則。
例如:
Go
```go
removed := e.RemovePolicy("alice", "data1", "read")
```
Node.js
```javas
const p = ['alice', 'data1', 'read']
const removed = await e.removePolicy(...p)
```
PHP
```php
$removed = $e->removePolicy("alice", "data1", "read");
```
### `RemoveFilteredPolicy()`
RemoveFilteredPolicy 移除當前策略中的授權規則,可以指定字段篩選器。 RemovePolicy 從當前策略中刪除授權規則。
例如:
Go
```go
removed := e.RemoveFilteredPolicy(0, "alice", "data1", "read")
```
Node.js
```javas
const p = ['alice', 'data1', 'read']
const removed = await e.removeFilteredPolicy(0, ...p)
```
PHP
```php
$removed = $e->removeFilteredPolicy(0, "alice", "data1", "read");
```
### `RemoveNamedPolicy()`
RemoveNamedPolicy 從當前命名策略中刪除授權規則。
例如:
Go
```go
removed := e.RemoveNamedPolicy("p", "alice", "data1", "read")
```
Node.js
```javas
const p = ['alice', 'data1', 'read']
const removed = await e.removeNamedPolicy('p', ...p)
```
PHP
```php
$removed = $e->removeNamedPolicy("p", "alice", "data1", "read");
```
### `RemoveFilteredNamedPolicy()`
RemoveFilteredNamedPolicy 從當前命名策略中移除授權規則,可以指定字段篩選器。
例如:
Go
```go
removed := e.RemoveFilteredNamedPolicy("p", 0, "alice", "data1", "read")
```
Node.js
```javas
const p = ['alice', 'data1', 'read']
const removed = await e.removeFilteredNamedPolicy('p', 0, ...p)
```
PHP
```php
$removed = $e->removeFilteredNamedPolicy("p", 0, "alice", "data1", "read");
```
### `HasGroupingPolicy()`
HasGroupingPolicy 確定是否存在角色繼承規則。
例如:
Go
```go
has := e.HasGroupingPolicy("alice", "data2_admin")
```
Node.js
```javas
const has = e.hasGroupingPolicy('alice', 'data2_admin')
```
PHP
```php
$has = $e->hasGroupingPolicy("alice", "data2_admin");
```
### `HasNamedGroupingPolicy()`
HasNamedGroupingPolicy 確定是否存在命名角色繼承規則。
For example:
Go
```go
has := e.HasNamedGroupingPolicy("g", "alice", "data2_admin")
```
Node.js
```javas
const has = e.hasNamedGroupingPolicy('g', 'alice', 'data2_admin')
```
PHP
```php
$has = $e->hasNamedGroupingPolicy("g", "alice", "data2_admin");
```
### `AddGroupingPolicy()`
AddGroupingPolicy 向當前策略添加角色繼承規則。 如果規則已經存在,函數返回false,并且不會添加規則。 如果規則已經存在,函數返回false,并且不會添加規則。
例如:
Go
```go
added := e.AddGroupingPolicy("group1", "data2_admin")
```
Node.js
```javas
const added = await e.addGroupingPolicy('group1', 'data2_admin')
```
PHP
```php
$added = $e->addGroupingPolicy("group1", "data2_admin");
```
### `AddNamedGroupingPolicy()`
AddNamedGroupingPolicy 將命名角色繼承規則添加到當前策略。 如果規則已經存在,函數返回false,并且不會添加規則。 否則,函數通過添加新規則并返回true。
例如:
Go
```go
added := e.AddNamedGroupingPolicy("g", "group1", "data2_admin")
```
Node.js
```javas
const added = await e.addNamedGroupingPolicy('g', 'group1', 'data2_admin')
```
PHP
```php
$added = $e->addNamedGroupingPolicy("g", "group1", "data2_admin");
```
### `RemoveGroupingPolicy()`
RemoveGroupingPolicy 從當前策略中刪除角色繼承規則。
例如:
Go
```go
removed := e.RemoveGroupingPolicy("alice", "data2_admin")
```
Node.js
```javas
const removed = await e.removeGroupingPolicy('alice', 'data2_admin')
```
PHP
```php
$removed = $e->removeGroupingPolicy("alice", "data2_admin");
```
### `RemoveFilteredGroupingPolicy()`
RemoveFilteredGroupingPolicy 從當前策略中移除角色繼承規則,可以指定字段篩選器。
例如:
Go
```go
removed := e.RemoveFilteredGroupingPolicy(0, "alice")
```
Node.js
```javas
const removed = await e.removeFilteredGroupingPolicy(0, 'alice')
```
PHP
```php
$removed = $e->removeFilteredGroupingPolicy(0, "alice");
```
### `RemoveNamedGroupingPolicy()`
RemoveNamedGroupingPolicy 從當前命名策略中移除角色繼承規則。
例如:
Go
```go
removed := e.RemoveNamedGroupingPolicy("g", "alice")
```
Node.js
```javas
const removed = await e.removeNamedGroupingPolicy('g', 'alice')
```
PHP
```php
$removed = $e->removeNamedGroupingPolicy("g", "alice");
```
### `RemoveFilteredNamedGroupingPolicy()`
RemoveFilteredNamedGroupingPolicy 從當前命名策略中移除角色繼承規則,可以指定字段篩選器。
例如:
Go
```go
removed := e.RemoveFilteredNamedGroupingPolicy("g", 0, "alice")
```
Node.js
```javas
const removed = await e.removeFilteredNamedGroupingPolicy('g', 0, 'alice')
```
PHP
```php
$removed = $e->removeFilteredNamedGroupingPolicy("g", 0, "alice");
```
### `AddFunction()`
AddFunction 添加自定義函數。
例如:
Go
```go
func CustomFunction(key1 string, key2 string) bool {
if key1 == "/alice_data2/myid/using/res_id" && key2 == "/alice_data/:resource" {
return true
} else if key1 == "/alice_data2/myid/using/res_id" && key2 == "/alice_data2/:id/using/:resId" {
return true
} else {
return false
}
}
func CustomFunctionWrapper(args ...interface{}) (interface{}, error) {
key1 := args[0].(string)
key2 := args[1].(string)
return bool(CustomFunction(key1, key2)), nil
}
e.AddFunction("keyMatchCustom", CustomFunctionWrapper)
```
Node.js
```javas
Method is not implemented
```
PHP
```php
func customFunction($key1, $key2) {
if ($key1 == "/alice_data2/myid/using/res_id" && $key2 == "/alice_data/:resource") {
return true;
} elseif ($key1 == "/alice_data2/myid/using/res_id" && $key2 == "/alice_data2/:id/using/:resId") {
return true;
} else {
return false;
}
}
func customFunctionWrapper(...$args){
$key1 := $args[0];
$key2 := $args[1];
return customFunction($key1, $key2);
}
$e->addFunction("keyMatchCustom", customFunctionWrapper);
```