# 开始使用
创建一个Casbin决策器需要有一个模型文件和策略文件为参数:
* Go
* ~~~go
import "github.com/casbin/casbin"
e := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
~~~
* Java
* ~~~java
import org.casbin.jcasbin.main.Enforcer;
Enforcer enforcer = new Enforcer("path/to/model.conf", "path/to/policy.csv");
~~~
* Node.js
* ~~~javascript
import * as casbin from 'casbin';
const enforcer = await casbin.newEnforcer('path/to/model.conf', 'path/to/policy.csv');
~~~
* PHP
* ~~~php
require_once './vendor/autoload.php';
use Casbin\Enforcer;
$e = new Enforcer("path/to/model.conf", "path/to/policy.csv");
~~~
* Python
* ~~~py
import casbin
e = casbin.Enforcer("path/to/model.conf", "path/to/policy.csv")
~~~
* Delphi
* ~~~
var
casbin: ICasbin;
begin
casbin := TCasbin.Create('path/to/model.conf', 'path/to/policy.csv');
...
end
~~~
**注意**:你也可以用DB中的策略初始化一个决策器,细节可以看 **策略存储**部分。
在访问发生之前, 在代码中添加强制挂钩:
* Go
* ~~~go
sub := "alice" // 想要访问资源的用户。
obj := "data1" //要访问的资源。
act := "read" // 用户对资源执行的操作。
if e.Enforce(sub, obj, act) == true {
// 允许alice读取data1
} else {
// 拒绝请求,显示错误
}
~~~
* Java
* ~~~Java
String sub = "alice"; //想要访问资源的用户。
String obj = "data1"; // 要访问的资源。
String act = "read"; // 用户对资源执行的操作。
if (enforcer.enforce(sub, obj, act) == true) {
// 允许alice读取data1
} else {
// 拒绝请求,显示错误
}
~~~
* Node.js
* ~~~javascript
const sub = 'alice'; // 想要访问资源的用户。
const obj = 'data1'; // 要访问的资源。
const act = 'read'; // 用户对资源执行的操作。
if (enforcer.enforce(sub, obj, act) == true) {
// 允许alice读取data1
} else {
// 拒绝请求,显示错误
}
~~~
* PHP
* ~~~php
$sub = "alice"; // 想要访问资源的用户。
$obj = "data1"; // 要访问的资源。
$act = "read"; // 用户对资源执行的操作。
if ($e->enforce($sub, $obj, $act) === true) {
// 允许alice读取data1
} else {
// 拒绝请求,显示错误
}
~~~
* Python
* ~~~python
sub = "alice" # 想要访问资源的用户。
obj = "data1" # 要访问的资源。
act = "read" # 用户对资源执行的操作。.
if e.enforce(sub, obj, act):
# 允许alice读取data1
pass
else:
# 拒绝请求,显示错误
pass
~~~
* Delphi
* ~~~delphi
if casbin.enforce(['alice,data1,read']) then
// Alice is super happy as she can read data1
else
// Alice is sad
~~~
除了静态策略文件之外, Casbin 还为运行时的权限管理提供 API。例如, 您可以将分配给用户的所有角色按如下所示进行:
* Go
* ~~~go
roles := e.GetRolesForUser("alice")
~~~
* Java
* ~~~java
Roles roles = enforcer.getRolesForUser("alice");
~~~
* Node.js
* ~~~javascript
const roles = enforcer.getRolesForUser('alice');
~~~
* PHP
* ~~~php
$roles = $e->getRolesForUser("alice");
~~~
* Python
* ~~~python
roles = e.get_roles_for_user("alice")
~~~
* Delphi
* ~~~
delphi
~~~
请参阅 **策略管理API** ,了解更多用途。
有关更多用法,请参阅**_test.go**文件。