# access-control-template

## 构建配置

1.在build.gradle中，增加`copyAccessControl`

```gradle
task copyAccessControl(type: Copy) {
    from "../access-control-template/yjs"
    into "./build/output/"
}
```

2. 在`buildZip`任务中添加依赖：

```gradle
task buildZip(type: Zip, dependsOn: [...,"copyAccessControl"]) {
...
```
3. 在`main.yjs`中添加RocksDB权限。
`@Permission("RocksDB")`

## ABAC.yjs的使用方式

1.在main.yjs中增加`import`语句，并在`onCreate`方法中，添加初始化调用。

```javascript
import "actemplate/ABAC.yjs"; 

function onCreate(arg) {
    ...  
    initABAC(requester);
}
```

2.针对需要访问控制的函数，使用`@Access`注解

```javascript
@Access({"ACFunction":"accept"})
export function xxx
```

3.初始化权限。

初始状态下，仅`owner`(启动者) 拥有全部权限。
通过调用`addPermission`和`removePermission`可对相应公钥的用户作授权。

## RBAC.yjs的使用方式

1.配置角色-权限。在`main.yjs` 下创建 `role.json`。
参考role.template.json。例如以下配置文件定义了两种角色`userAdmin`和`authorizedUser`。
启动者自动默认为超级管理员，有全部权限。
```json
{
    "userAdmin": ["addRole","removeRole"],
    "authorizedUser": ["hello"]
}
```


2.在main.yjs中增加`import`语句，并在`onCreate`方法中，添加初始化调用。

```javascript
import "actemplate/RBAC.yjs"; 

function onCreate(arg) {
    ...  
    initRBAC(requester, Global.Resources.loadAsString("/role.json"));
}
```

2.针对需要访问控制的函数，使用`@Access`注解
用法同ABAC。
```javascript
@Access({"ACFunction":"accept"})
export function xxx
```

3.初始化权限。
初始状态下，仅`owner`(启动者) 拥有全部权限。
通过调用`addRole`和`removeRole`可对相应公钥的用户作授权。