aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-db/src/main/resources/org/sonar/db/permission/PermissionMapper.xml
blob: 79a705a44dcf8b375c196b93f490705142dc03d5 (plain)
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
68
69
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="org.sonar.db.permission.PermissionMapper">

  <select id="selectUsers" parameterType="map" resultType="UserWithPermission">
    SELECT u.login as login, u.name as name, user_role.role as permission
    FROM users u
    LEFT JOIN user_roles user_role ON user_role.user_id=u.id
    AND user_role.role=#{query.permission}
    <if test="componentId != null">
      AND user_role.resource_id=#{componentId}
    </if>
    <if test="componentId == null">
      AND user_role.resource_id IS NULL
    </if>
    <where>
      u.active = ${_true}
      <choose>
        <when test="query.membership() == 'IN'">
          AND user_role.role IS NOT NULL
        </when>
        <when test="query.membership() == 'OUT'">
          AND user_role.role IS NULL
        </when>
      </choose>
      <if test="query.search() != null">
        AND (UPPER(u.name) LIKE #{query.searchSql} ESCAPE '/')
      </if>
    </where>
    ORDER BY u.name
  </select>

  <select id="selectGroups" parameterType="map" resultType="GroupWithPermission">
    SELECT name, description, permission FROM
    (SELECT g.name as name, g.description as description, group_role.role as permission
    FROM groups g
    LEFT JOIN group_roles group_role ON group_role.group_id=g.id
    AND group_role.role=#{query.permission}
    <if test="componentId != null">
      AND group_role.resource_id=#{componentId}
    </if>
    <if test="componentId == null">
      AND group_role.resource_id IS NULL
    </if>
    UNION
    -- Add Anyone group permission
    SELECT #{anyoneGroup} as name, NULL as description, group_role.role as permission
    FROM group_roles group_role
    <where>
      AND group_role.role=#{query.permission}
      AND group_role.group_id IS NULL
      <if test="componentId != null">
        AND group_role.resource_id=#{componentId}
      </if>
      <if test="componentId == null">
        AND group_role.resource_id IS NULL
      </if>
    </where>
    ) groups
    <where>
      <if test="query.search() != null">
        AND (UPPER(groups.name) LIKE #{query.searchSql} ESCAPE '/')
      </if>
    </where>
    ORDER BY groups.name
  </select>

</mapper>