]> source.dussan.org Git - sonarqube.git/blob
57ceee66ec0c9da6e8c91c92b12d21624cf1f34b
[sonarqube.git] /
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd">
3
4 <mapper namespace="org.sonar.db.permission.template.PermissionTemplateMapper">
5
6   <insert id="insert" parameterType="PermissionTemplate" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
7     INSERT INTO permission_templates (organization_uuid, name, kee, description, key_pattern, created_at, updated_at)
8     VALUES (
9     #{organizationUuid,jdbcType=VARCHAR},
10     #{name,jdbcType=VARCHAR},
11     #{kee,jdbcType=VARCHAR},
12     #{description,jdbcType=VARCHAR},
13     #{keyPattern,jdbcType=VARCHAR},
14     #{createdAt},
15     #{updatedAt})
16   </insert>
17
18   <update id="update" parameterType="PermissionTemplate">
19     UPDATE permission_templates
20     SET name = #{name}, description = #{description}, key_pattern = #{keyPattern}, updated_at = #{updatedAt}
21     WHERE id = #{id}
22   </update>
23
24   <delete id="deleteById" parameterType="long">
25     DELETE FROM permission_templates
26     WHERE id = #{templateId}
27   </delete>
28
29   <delete id="deleteByIds" parameterType="long">
30     delete from
31       permission_templates
32     where
33       id in <foreach collection="templateIds" open="(" close=")" item="templateId" separator=",">
34         #{templateId,jdbcType=BIGINT}
35       </foreach>
36   </delete>
37
38   <delete id="deleteUserPermissionsByTemplateId" parameterType="long">
39     delete from
40       perm_templates_users
41     where
42       template_id = #{templateId,jdbcType=BIGINT}
43   </delete>
44
45   <delete id="deleteUserPermissionsByTemplateIds">
46     delete from
47       perm_templates_users
48     where
49       template_id in <foreach collection="templateIds" open="(" close=")" item="templateId" separator=",">
50         #{templateId,jdbcType=BIGINT}
51       </foreach>
52   </delete>
53
54   <delete id="deleteUserPermission" parameterType="PermissionTemplateUser">
55     DELETE FROM perm_templates_users
56     WHERE template_id = #{templateId}
57     AND user_id = #{userId}
58     AND permission_reference = #{permission}
59   </delete>
60
61   <delete id="deleteUserPermissionsByOrganization" parameterType="map">
62     delete from perm_templates_users
63     where
64     user_id = #{userId,jdbcType=INTEGER}
65     and template_id in (select id from permission_templates where organization_uuid=#{organizationUuid,jdbcType=VARCHAR})
66   </delete>
67
68   <delete id="deleteUserPermissionsByUserId" parameterType="integer">
69     delete from perm_templates_users
70     where
71     user_id = #{userId,jdbcType=INTEGER}
72   </delete>
73
74   <delete id="deleteGroupPermissionsByTemplateId" parameterType="long">
75     delete from
76       perm_templates_groups
77     where
78       template_id = #{templateId,jdbcType=BIGINT}
79   </delete>
80
81   <delete id="deleteGroupPermissionsByTemplateIds">
82     delete from
83       perm_templates_groups
84     where
85       template_id in <foreach collection="templateIds" open="(" close=")" item="templateId" separator=",">
86         #{templateId,jdbcType=BIGINT}
87       </foreach>
88   </delete>
89
90   <delete id="deleteGroupPermission" parameterType="PermissionTemplateGroup">
91     DELETE FROM perm_templates_groups
92     WHERE template_id = #{templateId}
93     AND permission_reference = #{permission}
94     AND
95     <choose>
96       <when test="groupId != null">
97         group_id = #{groupId}
98       </when>
99       <otherwise>
100         group_id IS NULL
101       </otherwise>
102     </choose>
103   </delete>
104
105   <insert id="insertUserPermission" parameterType="PermissionTemplateUser">
106     INSERT INTO perm_templates_users (template_id, user_id, permission_reference, created_at, updated_at)
107     VALUES (#{templateId}, #{userId}, #{permission}, #{createdAt}, #{updatedAt})
108   </insert>
109
110   <insert id="insertGroupPermission" parameterType="PermissionTemplateGroup">
111     INSERT INTO perm_templates_groups (template_id, group_id, permission_reference, created_at, updated_at)
112     VALUES (
113     #{templateId,jdbcType=BIGINT},
114     #{groupId,jdbcType=INTEGER},
115     #{permission,jdbcType=VARCHAR},
116     #{createdAt,jdbcType=TIMESTAMP},
117     #{updatedAt,jdbcType=TIMESTAMP}
118     )
119   </insert>
120
121   <delete id="deleteByGroupId" parameterType="int">
122     delete from perm_templates_groups
123     where group_id = #{groupId,jdbcType=INTEGER}
124   </delete>
125
126   <select id="selectUserLoginsByQueryAndTemplate" parameterType="map" resultType="string">
127     select u.login as login
128       <include refid="userLoginsByQueryAndTemplate"/>
129     group by u.login, u.name
130     order by case when (count(ptu.permission_reference) > 0) then 1 else 2 end asc, u.name
131   </select>
132
133   <select id="countUserLoginsByQueryAndTemplate" parameterType="map" resultType="int">
134     SELECT count(1)
135       FROM (
136       SELECT DISTINCT u.login AS login, u.name AS name
137       <include refid="userLoginsByQueryAndTemplate"/>) u
138   </select>
139
140   <sql id="userLoginsByQueryAndTemplate">
141     FROM users u
142     LEFT JOIN perm_templates_users ptu ON ptu.user_id=u.id AND ptu.template_id=#{templateId}
143     INNER JOIN organization_members om ON u.id=om.user_id AND om.organization_uuid=#{query.organizationUuid}
144     <where>
145       u.active = ${_true}
146       <if test="query.getSearchQueryToSql() != null">
147         AND lower(u.name) like #{query.searchQueryToSqlLowercase} ESCAPE '/'
148       </if>
149       <if test="query.withAtLeastOnePermission()">
150         and ptu.permission_reference is not null
151         <if test="query.getPermission()!=null">
152           and ptu.permission_reference=#{query.permission}
153         </if>
154       </if>
155     </where>
156   </sql>
157
158   <select id="selectGroupNamesByQueryAndTemplate" parameterType="map" resultType="string">
159     select groups.name, lower(groups.name), groups.group_id
160     <include refid="groupNamesByQueryAndTemplate" />
161     group by groups.name, lower(groups.name), groups.group_id
162     order by case when (count(groups.permission) > 0) then 1 else 2 end asc, lower(groups.name), groups.name, groups.group_id
163   </select>
164
165   <select id="countGroupNamesByQueryAndTemplate" parameterType="map" resultType="int">
166     SELECT COUNT(1)
167     FROM (
168       SELECT DISTINCT group_id
169       <include refid="groupNamesByQueryAndTemplate" />) g
170   </select>
171
172   <sql id="groupNamesByQueryAndTemplate">
173     FROM
174     (SELECT
175       g.id AS group_id,
176       g.name AS name,
177       ptg.permission_reference AS permission,
178       ptg.template_id AS templateId
179     FROM groups g
180     LEFT JOIN perm_templates_groups ptg ON
181       ptg.group_id=g.id
182     where
183       g.organization_uuid=#{query.organizationUuid,jdbcType=VARCHAR}
184     UNION ALL
185     SELECT
186       0 AS group_id,
187       'Anyone' AS name,
188       ptg.permission_reference AS permission,
189       ptg.template_id AS templateId
190     FROM perm_templates_groups ptg
191     <where>
192       <if test="query.withAtLeastOnePermission()">
193         AND ptg.group_id IS NULL
194       </if>
195     </where>
196     ) groups
197     <where>
198       <if test="query.searchQueryToSql != null">
199         AND LOWER(groups.name) LIKE #{query.searchQueryToSqlLowercase} ESCAPE '/'
200       </if>
201       <if test="query.withAtLeastOnePermission()">
202         AND groups.permission IS NOT NULL
203         AND groups.templateId=#{templateId}
204         <if test="query.permission != null">
205           AND groups.permission=#{query.permission}
206         </if>
207       </if>
208     </where>
209   </sql>
210
211   <sql id="templateColumns">
212     id, organization_uuid as organizationUuid, name, kee, description, key_pattern AS keyPattern, created_at AS createdAt, updated_at AS updatedAt
213   </sql>
214
215   <select id="selectByUuid" parameterType="String" resultType="PermissionTemplate">
216     SELECT
217     <include refid="templateColumns"/>
218     FROM permission_templates
219     WHERE kee=#{uuid}
220   </select>
221
222   <select id="selectAll" parameterType="map" resultType="PermissionTemplate">
223     select
224     <include refid="templateColumns"/>
225     from permission_templates
226     where
227     organization_uuid = #{organizationUuid,jdbcType=VARCHAR}
228     <if test="upperCaseNameLikeSql != null">
229         and upper(name) like #{upperCaseNameLikeSql} escape '/'
230     </if>
231     order by upper(name), name
232   </select>
233
234   <select id="selectByName" parameterType="map" resultType="PermissionTemplate">
235     select
236     <include refid="templateColumns"/>
237     from permission_templates
238     where
239     organization_uuid = #{organizationUuid,jdbcType=VARCHAR} and
240     upper(name) = #{name,jdbcType=VARCHAR}
241   </select>
242
243   <sql id="permissionTemplateUserColumns">
244     ptu.id,
245     ptu.template_id as templateId,
246     ptu.permission_reference AS permission,
247     ptu.user_id AS userId,
248     u.name AS userName,
249     u.login AS userLogin,
250     ptu.created_at AS createdAt,
251     ptu.updated_at AS updatedAt
252   </sql>
253
254   <select id="selectUserPermissionsByTemplateIdAndUserLogins" parameterType="Long" resultType="PermissionTemplateUser">
255     SELECT
256     <include refid="permissionTemplateUserColumns"/>
257     FROM perm_templates_users ptu
258     INNER JOIN users u ON u.id = ptu.user_id AND u.active = ${_true}
259     <where>
260       AND ptu.template_id = #{templateId}
261       <if test="!logins.isEmpty()">
262         AND u.login IN <foreach collection="logins" open="(" close=")" item="login" separator=",">
263           #{login}
264         </foreach>
265       </if>
266     </where>
267   </select>
268
269   <select id="selectGroupPermissionsByTemplateIdAndGroupNames" parameterType="Long" resultType="PermissionTemplateGroup">
270     SELECT
271       sub.id,
272       sub.templateId,
273       sub.permission,
274       sub.groupId,
275       sub.groupName,
276       sub.createdAt,
277       sub.updatedAt
278     FROM  (
279       SELECT
280         ptg.id,
281         ptg.template_id as templateId,
282         ptg.permission_reference AS permission,
283         ptg.group_id AS groupId,
284         g.name AS groupName,
285         ptg.created_at as createdAt,
286         ptg.updated_at as updatedAt
287       FROM perm_templates_groups ptg
288       INNER JOIN groups g ON
289         g.id=ptg.group_id
290       UNION ALL
291         SELECT
292           ptg.id,
293           ptg.template_id as templateId,
294           ptg.permission_reference AS permission,
295           0 AS groupId,
296           'Anyone' AS groupName,
297           ptg.created_at as createdAt,
298           ptg.updated_at as updatedAt
299         FROM perm_templates_groups ptg
300         WHERE ptg.group_id IS NULL
301     ) sub
302     <where>
303       sub.templateId=#{templateId}
304       <if test="!groups.isEmpty()">
305         AND sub.groupName IN <foreach collection="groups" open="(" close=")" item="group" separator=",">
306         #{group}
307         </foreach>
308       </if>
309     </where>
310   </select>
311
312   <select id="selectPotentialPermissionsByUserIdAndTemplateId" parameterType="map" resultType="String">
313     <if test="userId!=null">
314       -- from template users
315       select ptu.permission_reference as permission_key
316       from perm_templates_users ptu
317       <where>
318         and ptu.user_id=#{userId}
319         and ptu.template_id=#{templateId}
320       </where>
321       UNION
322       -- from template groups except anyone group
323       select ptg.permission_reference as permission_key
324       from perm_templates_groups ptg
325       inner join groups_users gu on ptg.group_id = gu.group_id
326       <where>
327         and gu.user_id=#{userId}
328         and ptg.template_id=#{templateId}
329       </where>
330       UNION
331       -- from template characteristics
332       select ptc.permission_key as permission_key
333       from perm_tpl_characteristics ptc
334       <where>
335         and with_project_creator = ${_true}
336         and ptc.template_id = #{templateId}
337       </where>
338       UNION
339     </if>
340     -- from anyone group
341     select ptg.permission_reference as permission_key
342     from perm_templates_groups ptg
343     where ptg.template_id=#{templateId}
344     and ptg.group_id IS NULL
345   </select>
346
347   <select id="usersCountByTemplateIdAndPermission" parameterType="map"
348           resultType="org.sonar.db.permission.template.CountByTemplateAndPermissionDto">
349     SELECT ptu.template_id as templateId, ptu.permission_reference as permission, count(u.login) as count
350     FROM users u
351     INNER JOIN perm_templates_users ptu ON ptu.user_id=u.id
352     AND ptu.template_id in
353     <foreach collection="templateIds" open="(" close=")" item="id" separator=",">
354       #{id}
355     </foreach>
356     <where>
357       AND u.active = ${_true}
358     </where>
359     GROUP BY ptu.template_id, ptu.permission_reference
360   </select>
361
362   <select id="groupsCountByTemplateIdAndPermission" parameterType="map"
363           resultType="org.sonar.db.permission.template.CountByTemplateAndPermissionDto">
364     SELECT count(1) as count, permission, templateId
365     FROM
366     (SELECT g.name as name, ptg.permission_reference as permission, ptg.template_id as templateId
367     FROM groups g
368     INNER JOIN perm_templates_groups ptg ON ptg.group_id=g.id
369     UNION
370     -- Add Anyone group permission
371     SELECT #{anyoneGroup} as name, ptg.permission_reference as permission, ptg.template_id as templateId
372     FROM perm_templates_groups ptg
373     <where>
374       AND ptg.group_id IS NULL
375     </where>
376     ) groups
377     <where>
378       AND groups.templateId in
379       <foreach collection="templateIds" open="(" close=")" item="id" separator=",">
380         #{id}
381       </foreach>
382     </where>
383     GROUP BY groups.permission, groups.templateId
384   </select>
385
386   <select id="countGroupsWithPermission" resultType="int" parameterType="map">
387     select count(1)
388     from perm_templates_groups ptg
389     where ptg.template_id = #{templateId}
390     and ptg.permission_reference = #{permission}
391     and
392     <if test="groupId == null">
393       ptg.group_id is null
394     </if>
395     <if test="groupId != null">
396       ptg.group_id = #{groupId}
397     </if>
398   </select>
399
400   <select id="selectTemplateIdsByOrganization" resultType="Long">
401     select
402       id
403     from
404       permission_templates
405     where
406       organization_uuid = #{organizationUuid,jdbcType=VARCHAR}
407   </select>
408
409   <select id="selectAllGroupPermissionTemplatesByGroupId" parameterType="Long" resultType="PermissionTemplateGroup">
410     SELECT
411       ptg.id,
412       ptg.template_id as templateId,
413       ptg.permission_reference AS permission,
414       ptg.group_id AS groupId,
415       g.name AS groupName,
416       ptg.created_at as createdAt,
417       ptg.updated_at as updatedAt
418     FROM perm_templates_groups ptg
419     INNER JOIN groups g ON g.id=ptg.group_id
420     <where>
421       ptg.group_id=#{groupId,jdbcType=INTEGER}
422     </where>
423   </select>
424 </mapper>