# 一、背景
在添加关注或者事项关联标签的过程中，存在请求被劫持修改事项ID的可能性。当前用户不存在当前事项的查阅权限，但是通过关注接口篡改事项ID能成功实现关注并获取到相关事项名称等信息，名称等信息可能会涉及到敏感信息，因此需要在关注或者添加标签的过程需要做一个权限校验。
# 二、实现方式
**由关注模块提供统一接口，由各个模块实现rpc接口，通过模块分组的方式来进行处理**，具体接口如下：
com.weaver.my.api.common.rest.EntityVerificationRest 
实现方法：com.weaver.my.api.common.rest.EntityVerificationRest#checkEntity（EntityUserDTO dto, String module）
接口：
```java
package com.weaver.my.api.common.rest;

import com.weaver.common.base.entity.result.WeaResult;
import com.weaver.my.api.common.entity.EntityUserDTO;
import com.weaver.my.api.common.entity.EntityVerDTO;
import io.swagger.annotations.ApiOperation;

import java.util.List;

/**
 * @description: 权限校验接口
 * @author: lvxing
 * @date: Created in 2022/2/10 13:16
 * @version:1.0
 */
public interface EntityVerificationRest {
    @ApiOperation("根据事项ID校验当前用户是否有关注、添加标签等权限")
    public WeaResult<List<EntityVerDTO>> checkEntity(EntityUserDTO dto, String module);
}

```

入参：
```java
public class EntityUserDTO implements Serializable {
    private String tenantKey;
    private Long employeeId;
    private Set<Long> entityId;
    private String  module;

    public String getModule() {
        return module;
    }

    public void setModule(String module) {
        this.module = module;
    }

    public String getTenantKey() {
        return tenantKey;
    }

    public void setTenantKey(String tenantKey) {
        this.tenantKey = tenantKey;
    }

    public Long getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(Long employeeId) {
        this.employeeId = employeeId;
    }

    public Set<Long> getEntityId() {
        return entityId;
    }

    public void setEntityId(Set<Long> entityId) {
        this.entityId = entityId;
    }
}
```
出参：
```java
public class EntityVerDTO implements Serializable {
    /**
     * 事项ID
     */
    private Long entityId;
    /**
     * 是否有关注或者添加标签权限
     */
    private Boolean authority;

    public Long getEntityId() {
        return entityId;
    }

    public void setEntityId(Long entityId) {
        this.entityId = entityId;
    }

    public Boolean getAuthority() {
        return authority;
    }

    public void setAuthority(Boolean authority) {
        this.authority = authority;
    }
}
```
