diff options
author | Julien Lancelot <julien.lancelot@sonarsource.com> | 2014-09-05 17:50:55 +0200 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@sonarsource.com> | 2014-09-09 11:41:03 +0200 |
commit | 4140a2e060e2c2cfe047a107be7ec71216e962a9 (patch) | |
tree | d7f1451be7ddfca384ae9bd02c165c9bd8bf27b1 /sonar-core | |
parent | 2c537500205f609f520b675691de3290d53e35aa (diff) | |
download | sonarqube-4140a2e060e2c2cfe047a107be7ec71216e962a9.tar.gz sonarqube-4140a2e060e2c2cfe047a107be7ec71216e962a9.zip |
SONAR-5561 Create query to load issue authorization from db
Diffstat (limited to 'sonar-core')
3 files changed, 66 insertions, 10 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationDto.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationDto.java index d66f0c9d231..0c0b767c403 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationDto.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationDto.java @@ -25,16 +25,18 @@ import org.sonar.core.persistence.Dto; import java.io.Serializable; import java.util.List; +import static com.google.common.collect.Lists.newArrayList; + public final class IssueAuthorizationDto extends Dto<String> implements Serializable { private String project; private String permission; - private List<String> groups; - private List<String> users; + private List<String> groups = newArrayList(); + private List<String> users = newArrayList(); @Override public String getKey() { - return null; + return project; } public String getProject() { @@ -64,6 +66,11 @@ public final class IssueAuthorizationDto extends Dto<String> implements Serializ return this; } + public IssueAuthorizationDto addGroup(String group) { + groups.add(group); + return this; + } + public List<String> getUsers() { return users; } @@ -72,4 +79,10 @@ public final class IssueAuthorizationDto extends Dto<String> implements Serializ this.users = users; return this; } + + public IssueAuthorizationDto addUser(String user) { + users.add(user); + return this; + } + } diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationMapper.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationMapper.java index d327f7f938d..ca81eccafae 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueAuthorizationMapper.java @@ -20,8 +20,14 @@ package org.sonar.core.issue.db; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; + public interface IssueAuthorizationMapper { IssueAuthorizationDto selectByKey(String key); + IssueAuthorizationDto selectAfterDate(@Param("date") Date date, @Param("permission") String permission); + } diff --git a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueAuthorizationMapper.xml b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueAuthorizationMapper.xml index 59dd1496014..d4cf8ba718f 100644 --- a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueAuthorizationMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueAuthorizationMapper.xml @@ -4,13 +4,50 @@ <mapper namespace="org.sonar.core.issue.db.IssueAuthorizationMapper"> - <select id="selectByKey" parameterType="String" resultType="IssueAuthorization"> - select * - from issues i - inner join rules r on r.id=i.rule_id - inner join projects p on p.id=i.component_id - inner join projects root on root.id=i.root_component_id - where i.kee=#{kee} + <select id="selectAfterDate" parameterType="map" resultType="map"> + SELECT + project_authorization.project as project, + project_authorization.login as user, + project_authorization.permission_group as permission_group, + project_authorization.permission_role as permission_role + FROM ( + -- users + SELECT + projects.kee AS project, + users.login AS login, + NULL AS permission_group, + user_roles.role as permission_role + FROM projects + INNER JOIN user_roles ON user_roles.resource_id = projects.id AND user_roles.role = #{permission} + INNER JOIN users ON users.id = user_roles.user_id + WHERE + projects.authorization_updated_at >= #{date} + UNION + -- groups without Anyone + SELECT + projects.kee AS project, + NULL AS login, + groups.name AS permission_group, + group_roles.role as permission_role + FROM projects + INNER JOIN group_roles ON group_roles.resource_id = projects.id AND group_roles.role = #{permission} + INNER JOIN groups ON groups.id = group_roles.group_id + WHERE + projects.authorization_updated_at >= #{date} + AND group_id IS NOT NULL + UNION + -- Anyone groups + SELECT + projects.kee AS project, + NULL AS login, + 'anyone' AS permission_group, + group_roles.role as permission_role + FROM projects + INNER JOIN group_roles ON group_roles.resource_id = projects.id AND group_roles.role = #{permission} + WHERE + projects.authorization_updated_at >= #{date} + AND group_roles.group_id IS NULL + ) AS project_authorization </select> </mapper> |