private static String toUppercaseSqlQuery(String nameMatch) {
String wildcard = "%";
return format("%s%s%s", wildcard, nameMatch.toUpperCase(Locale.ENGLISH), wildcard);
-
}
public PermissionTemplateDto insert(DbSession session, PermissionTemplateDto dto) {
mapper(dbSession).deleteUserPermissionsByOrganization(organizationUuid, userId);
}
+ public void deleteUserPermissionsByUserId(DbSession dbSession, int userId) {
+ mapper(dbSession).deleteUserPermissionsByUserId(userId);
+ }
+
public void insertGroupPermission(DbSession session, long templateId, @Nullable Integer groupId, String permission) {
PermissionTemplateGroupDto permissionTemplateGroup = new PermissionTemplateGroupDto()
.setTemplateId(templateId)
void deleteUserPermissionsByOrganization(@Param("organizationUuid") String organizationUuid, @Param("userId") int userId);
+ void deleteUserPermissionsByUserId(@Param("userId") int userId);
+
void deleteUserPermission(PermissionTemplateUserDto permissionTemplateUser);
void deleteGroupPermissionsByTemplateId(long templateId);
and template_id in (select id from permission_templates where organization_uuid=#{organizationUuid,jdbcType=VARCHAR})
</delete>
+ <delete id="deleteUserPermissionsByUserId" parameterType="integer">
+ delete from perm_templates_users
+ where
+ user_id = #{userId,jdbcType=INTEGER}
+ </delete>
+
<delete id="deleteGroupPermissionsByTemplateId" parameterType="long">
delete from
perm_templates_groups
assertThat(underTest.selectUserPermissionsByTemplateId(dbSession, anotherTemplate.getId())).extracting(PermissionTemplateUserDto::getUserId).containsOnly(user.getId());
}
+ @Test
+ public void delete_user_permissions_by_user_id() {
+ OrganizationDto organization = db.organizations().insert();
+ OrganizationDto anotherOrganization = db.organizations().insert();
+ UserDto user = db.users().insertUser();
+ UserDto anotherUser = db.users().insertUser();
+ PermissionTemplateDto template = db.permissionTemplates().insertTemplate(organization);
+ PermissionTemplateDto anotherTemplate = db.permissionTemplates().insertTemplate(anotherOrganization);
+ String permission = "PERMISSION";
+ db.permissionTemplates().addUserToTemplate(template.getId(), user.getId(), permission);
+ db.permissionTemplates().addUserToTemplate(template.getId(), anotherUser.getId(), permission);
+ db.permissionTemplates().addUserToTemplate(anotherTemplate.getId(), user.getId(), permission);
+
+ underTest.deleteUserPermissionsByUserId(dbSession, user.getId());
+ db.commit();
+
+ assertThat(db.select("select template_id as \"templateId\", user_id as \"userId\", permission_reference as \"permission\" from perm_templates_users"))
+ .extracting((row) -> row.get("templateId"), (row) -> row.get("userId"), (row) -> row.get("permission"))
+ .containsOnly(tuple(template.getId(), anotherUser.getId().longValue(), permission));
+ }
+
private PermissionTemplateDto createTemplate(OrganizationDto organization) {
UserDto user = db.users().insertUser();
GroupDto group = db.users().insertGroup();
ensureNotLastAdministrator(dbSession, user);
+ Integer userId = user.getId();
dbClient.userTokenDao().deleteByLogin(dbSession, login);
- dbClient.userGroupDao().deleteByUserId(dbSession, user.getId());
- dbClient.propertiesDao().deleteByQuery(dbSession, PropertyQuery.builder().setUserId(user.getId()).build());
- dbClient.userPermissionDao().deleteByUserId(dbSession, user.getId());
dbClient.propertiesDao().deleteByKeyAndValue(dbSession, DEFAULT_ISSUE_ASSIGNEE, user.getLogin());
- dbClient.organizationMemberDao().deleteByUserId(dbSession, user.getId());
- dbClient.userDao().deactivateUserById(dbSession, user.getId());
+ dbClient.propertiesDao().deleteByQuery(dbSession, PropertyQuery.builder().setUserId(userId).build());
+ dbClient.userGroupDao().deleteByUserId(dbSession, userId);
+ dbClient.userPermissionDao().deleteByUserId(dbSession, userId);
+ dbClient.permissionTemplateDao().deleteUserPermissionsByUserId(dbSession, userId);
+ dbClient.organizationMemberDao().deleteByUserId(dbSession, userId);
+ dbClient.userDao().deactivateUserById(dbSession, userId);
dbSession.commit();
}
import org.sonar.db.DbTester;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.organization.OrganizationDto;
+import org.sonar.db.permission.template.PermissionTemplateDto;
+import org.sonar.db.permission.template.PermissionTemplateUserDto;
import org.sonar.db.property.PropertyDto;
import org.sonar.db.property.PropertyQuery;
import org.sonar.db.user.GroupDto;
db.users().insertPermissionOnUser(user, ADMINISTER_QUALITY_PROFILES);
db.users().insertProjectPermissionOnUser(user, USER, project);
db.users().insertProjectPermissionOnUser(user, CODEVIEWER, project);
- db.commit();
deactivate(user.getLogin()).getInput();
assertThat(db.getDbClient().userPermissionDao().selectProjectPermissionsOfUser(dbSession, user.getId(), project.getId())).isEmpty();
}
+ @Test
+ public void deactivate_user_deletes_his_permission_templates() {
+ logInAsSystemAdministrator();
+ UserDto user = insertUser(newUserDto());
+ PermissionTemplateDto template = db.permissionTemplates().insertTemplate();
+ PermissionTemplateDto anotherTemplate = db.permissionTemplates().insertTemplate();
+ db.permissionTemplates().addUserToTemplate(template.getId(), user.getId(), USER);
+ db.permissionTemplates().addUserToTemplate(anotherTemplate.getId(), user.getId(), CODEVIEWER);
+
+ deactivate(user.getLogin()).getInput();
+
+ assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(dbSession, template.getId())).extracting(PermissionTemplateUserDto::getUserId).isEmpty();
+ assertThat(db.getDbClient().permissionTemplateDao().selectUserPermissionsByTemplateId(dbSession, anotherTemplate.getId())).extracting(PermissionTemplateUserDto::getUserId).isEmpty();
+ }
+
@Test
public void deactivate_user_deletes_his_default_assignee_settings() {
logInAsSystemAdministrator();
db.properties().insertProperty(new PropertyDto().setKey("sonar.issues.defaultAssigneeLogin").setValue(user.getLogin()).setResourceId(project.getId()));
db.properties().insertProperty(new PropertyDto().setKey("sonar.issues.defaultAssigneeLogin").setValue(user.getLogin()).setResourceId(anotherProject.getId()));
db.properties().insertProperty(new PropertyDto().setKey("other").setValue(user.getLogin()).setResourceId(anotherProject.getId()));
- db.commit();
deactivate(user.getLogin()).getInput();