### 一. 说明

eb专项会有自身扩展权限，需要在针对eb默认权限做扩展加入专项具体业务场景的权限，可通过权限扩展接口返回权限，组合生效.

1、对表单增加permissionExtendGroup概念，类似对表打标签，对表增加权限分组标记

2、有需要专项模块实现eb接口暴露对应rpc接口提供权限返回，运行时根据权限分组获取对应权限并组装到标准业务上

### 二. 对接步骤

#### 1. 引入ebuilder-form-client 表单对外api包

```
<dependency>
    <groupId>com.weaver</groupId>
    <artifactId>weaver-ebuilder-form-client</artifactId>
</dependency>
```

#### 2. rpc接口说明

##### 2.1. 更新和获取权限分组

```java
/** 以下接口为:com.weaver.ebuilder.form.client.service.obj.RemoteEBObjService::ebuilderform **/

/**
 * 更新表单 权限分组
 * @param objId                 表单id
 * @param permissionExtendGroup 权限分组
 * @param tenantKey             租户key
 * @return 更新结果
 */
WeaResult<Boolean> updateObjPermissionExtendGroup(Long objId, String permissionExtendGroup, String tenantKey);

/**
 * 获取当前应用下配置权限分组的表单
 * @param appId     应用id
 * @param tenantKey 租户key
 * @return List<Obj>
 */
WeaResult<List<Obj>> getPermissionExtendGroupObjByAppId(Long appId, String tenantKey);

/**
 * 根据权限分组获取表单
 * @param permissionExtendGroup 权限分组标记
 * @param tenantKey             租户key
 * @return List<Obj>
 */
WeaResult<List<Obj>> getPermissionExtendGroupObjs(String permissionExtendGroup, String tenantKey);
```

##### 2.2. 权限实现说明

```
1. 实现接口com.weaver.ebuilder.form.client.service.permission.EBFormPermissionExtendService并暴露rpc接口, 
    暴露格式要求:  EBFormPermissionExtendService::permissionExtendGroup
2. 返回结果中需是否有对应表单数据查看、新建、编辑、删除权限, 默认值为false,权限运行取标准权限和扩展权限并集
3. 请求参数中无数据id(dataId)校验表单通用权限, 有数据id校验表单下具体数据权限
4. 表单中更新了group但是没有暴露接口 或服务请求不通/超时的情况， 走默认值已eb的权限为准
```

###### 2.2.1 接口实现demo

1. 更新表单权限分组标记
  
  
  
  ```java
  @RpcReference("ebuilderform")
  private RemoteEBObjService remoteEBObjService;
  
  public void testMethod(Long objId, String tenantKey) {
  	remoteEBObjService.updateObjPermissionExtendGroup(objId, "testGroup", tenantKey);
  }
  ```
2. 代码实现权限逻辑
  
  ```java
  package com.weaver.ebuilder.form.test;
  
  import com.weaver.ebuilder.form.client.entity.permission.PermissionExtendDto;
  import com.weaver.ebuilder.form.client.entity.permission.PermissionExtendResult;
  import com.weaver.ebuilder.form.client.service.permission.EBFormPermissionExtendService;
  import org.springframework.stereotype.Service;
  
  @Service("testGroup_EBFormPermissionExtendService")
  public class TestRpcImpl implements EBFormPermissionExtendService {
      @Override
      public PermissionExtendResult getPermissionExtend(PermissionExtendDto permissionExtendDto) {
          // todo...
          return null;
      }
  }
  ```
3. 接口暴露

```java
<dubbo:service ref="testGroup_EBFormPermissionExtendService"
                   interface="com.weaver.ebuilder.form.client.service.permission.EBFormPermissionExtendService" group="testGroup"/>
```

#### 3. 实体说明

**PermissionExtendDto** 权限扩展传输对象:

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| dataId | String | 数据id |
| objId | String | 表单id |
| permissionExtendGroup | String | 权限扩展group |
| permissionExtendType | PermissionExtendTypeEnum | singleData:单条数据权限<br>其他：需要返回sql片段 |
| employee | EBSimpleEmployee | 当前操作人 |
| extendParam | Map\<String, Object\> | 扩展参数 |

**PermissionExtendResult** 权限扩展返回:

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| dataRead | boolean | 数据查看权限 |
| dataCreate | boolean | 数据创建权限 |
| dataEdit | boolean | 数据编辑权限 |
| dataDelete | boolean | 数据删除权限 |
| filePermission | FilePermissionExtend | 附件权限 |
| extendPermissionSql | String | 扩展权限sql、仅针对非单条数据权限情况生效 |

**FilePermissionExtend** 附件权限扩展:

- 注:仅支持附件类型字段，文档类型字段走知识权限控制

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| preview | boolean | 附件预览权限 |
| download | boolean | 附件下载权限 |
