项目管理权限二开扩展：

1.项目管理为EB搭建,优先推荐使用权限管理进行可视化权限配置

2.配置无法满足业务需求的权限,可以通过该二开口子进行权限扩展

目前支持二开权限的表单：任务基础、项目基础、任务类型、任务分组、前后置任务约束、,项目阶段数据、项目采购、项目合同、项目付款合同、工时成本单价、项目计划、项目风险、项目问题、项目周报、任务团队、任务团队成员、项目实际工时、项目交付物、项目单据、项目工时成本、项目客户、联系人、项目费用报销、项目验收、,项目外部协作、项目月报、项目成本、需求登记、成果备案、项目中检、项目结项、项目变更、项目预算表、项目开票、经费预算、项目评价、项目绩效、项目团队、项目团队角色、项目团队成员、项目联动规则、项目联动规则关联表

```
/**
 *
 * 入参 params:
 *   dataRead    - Boolean 标准鉴权的读权限
 *   dataCreate  - Boolean 标准鉴权的创建权限
 *   dataEdit    - Boolean 标准鉴权的编辑权限
 *   dataDelete  - Boolean 标准鉴权的删除权限
 *   objId       - String  表单对象ID
 *   dataId      - String  数据记录ID
 *   permissionType - String 鉴权类型 (create/read/edit/delete/singleData)
 *   userId      - Long    当前用户ID
 *   tenantKey   - String  租户标识
 *   extendParam - Map     扩展参数
 *
 * 返回 result:
 *   dataRead/dataCreate/dataEdit/dataDelete - Boolean 二开处理后的权限结果
 */
@Slf4j
@WeaHookReg(code = "EBPROJECT_PERMISSION_EXTEND_HOOK_001", order = 0)
public class PermissionExtendHookEvent extends RegHookEvent {

    @Override
    public WeaHookResponse handle(WeaHookRequest request, WeaHookResponse response, AppInfo appInfo) throws Exception {
        Map<String, Object> params = request.getParams();
        log.info("========== enter PermissionExtendHookEvent ==========");
        log.info("params: {}", JSONObject.toJSONString(params));
        log.info("objId: {}, dataId: {}, permissionType: {}",
                params.get("objId"), params.get("dataId"), params.get("permissionType"));
        log.info("userId: {}, tenantKey: {}", params.get("userId"), params.get("tenantKey"));
        log.info("dataRead: {}, dataCreate: {}, dataEdit: {}, dataDelete: {}",
                params.get("dataRead"), params.get("dataCreate"), params.get("dataEdit"), params.get("dataDelete"));

        // 读取标准鉴权结果
        boolean dataRead = Boolean.TRUE.equals(params.get("dataRead"));
        boolean dataCreate = Boolean.TRUE.equals(params.get("dataCreate"));
        boolean dataEdit = Boolean.TRUE.equals(params.get("dataEdit"));
        boolean dataDelete = Boolean.TRUE.equals(params.get("dataDelete"));

        // TODO: 在此处添加自定义权限逻辑，例如：
        // dataRead = true;  // 强制允许读权限
        // dataDelete = false; // 强制禁止删除权限

        // 构建返回结果
        Map<String, Object> result = new HashMap<>();
        result.put("dataRead", dataRead);
        result.put("dataCreate", dataCreate);
        result.put("dataEdit", dataEdit);
        result.put("dataDelete", dataDelete);
        response.setResult(result);

        log.info("========== PermissionExtendHookEvent result: {} ==========", JSONObject.toJSONString(result));
        return response;
    }

    @Override
    public void rollBack(WeaHookRequest request, WeaHookResponse response, AppInfo appInfo) throws Exception {
        log.info("PermissionExtendHookEvent rollBack");
    }
}
```
