刘光辉
4 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="jnpf.dmsMapper.DmsApprovedReadAccessMapper">
    <resultMap id="Department" type="jnpf.dmsMapper.DmsApprovedReadAccessMapper$Department">
        <constructor><arg column="id" javaType="java.lang.String"/></constructor>
    </resultMap>
    <resultMap id="Permission" type="jnpf.dmsEntity.permission.entity.DmsFilePermissionEntity">
        <id column="id" property="id" typeHandler="jnpf.dmsDatabase.DmsUuidTypeHandler"/>
        <result column="tenant_id" property="tenantId"/>
        <result column="resource_type" property="resourceType"/>
        <result column="resource_id" property="resourceId" typeHandler="jnpf.dmsDatabase.DmsUuidTypeHandler"/>
        <result column="resource_scope" property="resourceScope"/>
        <result column="principal_type" property="principalType"/>
        <result column="principal_id" property="principalId"/>
        <result column="include_child_orgs" property="includeChildOrgs"/>
        <result column="approved_org_scope" property="approvedOrgScope"/>
        <result column="action_code" property="actionCode"/>
        <result column="source_type" property="sourceType"/>
        <result column="source_id" property="sourceId"/>
        <result column="valid_from" property="validFrom"/>
        <result column="valid_to" property="validTo"/>
        <result column="max_use_count" property="maxUseCount"/>
        <result column="used_count" property="usedCount"/>
        <result column="grant_reason" property="grantReason"/>
        <result column="granted_by_type" property="grantedByType"/>
        <result column="granted_by_id" property="grantedById"/>
        <result column="revoked_at" property="revokedAt"/>
        <result column="revoked_by_type" property="revokedByType"/>
        <result column="revoked_by_id" property="revokedById"/>
        <result column="revoke_reason" property="revokeReason"/>
        <result column="revision" property="revision"/>
        <result column="created_at" property="createdAt"/>
        <result column="updated_at" property="updatedAt"/>
    </resultMap>
    <sql id="Columns">id, tenant_id, resource_type, resource_id, resource_scope, principal_type, principal_id, include_child_orgs, approved_org_scope, action_code, source_type, source_id, valid_from, valid_to, max_use_count, used_count, grant_reason, granted_by_type, granted_by_id, revoked_at, revoked_by_type, revoked_by_id, revoke_reason, revision, created_at, updated_at</sql>
    <sql id="Owned">
        tenant_id = #{tenantId} AND resource_type = 'FILE_VERSION' AND resource_scope = 'SELF'
        AND principal_type = 'ORG' AND action_code = 'READ' AND source_type = 'WORKFLOW'
        AND granted_by_type = 'SERVICE' AND granted_by_id = 'dms-approved-read'
        AND source_id LIKE 'approved-read:%' AND approved_org_scope IS NOT NULL
    </sql>
    <select id="departments" resultMap="Department">
        SELECT f_id AS id FROM public.base_organize
        WHERE f_tenant_id = #{tenantId} AND f_delete_mark IS NULL AND f_enabled_mark = 1
        AND f_id IN <foreach collection="ids" item="departmentId" open="(" separator="," close=")">#{departmentId}</foreach>
    </select>
    <select id="owned" resultMap="Permission">
        SELECT <include refid="Columns"/> FROM public.dms_file_permissions
        WHERE <include refid="Owned"/> AND resource_id = #{versionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} ORDER BY id FOR UPDATE
    </select>
    <update id="revoke">
        UPDATE public.dms_file_permissions SET revoked_at = CURRENT_TIMESTAMP,
        revoked_by_type = 'SERVICE', revoked_by_id = 'dms-approved-read',
        revoke_reason = '同版本文件审核正式生效,替换本来源查阅授权', revision = revision + 1
        WHERE <include refid="Owned"/> AND id = #{id,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND revoked_at IS NULL
    </update>
    <select id="insert" resultMap="Permission" affectData="true" flushCache="true">
        INSERT INTO public.dms_file_permissions
        (id, tenant_id, resource_type, resource_id, resource_scope, principal_type, principal_id,
         include_child_orgs, approved_org_scope, action_code, source_type, source_id, valid_from,
         grant_reason, granted_by_type, granted_by_id)
        VALUES (uuidv7(), #{p.tenantId}, 'FILE_VERSION', #{p.resourceId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}, 'SELF', 'ORG', #{p.principalId},
         #{p.includeChildOrgs}, #{p.approvedOrgScope}, 'READ', 'WORKFLOW', #{p.sourceId}, #{p.validFrom},
         #{p.grantReason}, 'SERVICE', 'dms-approved-read')
        RETURNING <include refid="Columns"/>
    </select>
</mapper>