import com.google.common.collect.Lists;
import org.apache.commons.lang.StringUtils;
import org.sonar.api.ServerComponent;
+import org.sonar.core.permission.GlobalPermissions;
import org.sonar.core.permission.PermissionTemplateDao;
import org.sonar.core.permission.PermissionTemplateDto;
+import org.sonar.core.persistence.DbSession;
+import org.sonar.core.persistence.MyBatis;
+import org.sonar.core.user.GroupDto;
import org.sonar.core.user.UserDao;
import org.sonar.server.exceptions.BadRequestException;
+import org.sonar.server.exceptions.NotFoundException;
+import org.sonar.server.user.UserSession;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
+
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
*/
public class InternalPermissionTemplateService implements ServerComponent {
+ private final MyBatis myBatis;
private final PermissionTemplateDao permissionTemplateDao;
private final UserDao userDao;
private final PermissionFinder finder;
- public InternalPermissionTemplateService(PermissionTemplateDao permissionTemplateDao, UserDao userDao, PermissionFinder finder) {
+ public InternalPermissionTemplateService(MyBatis myBatis, PermissionTemplateDao permissionTemplateDao, UserDao userDao, PermissionFinder finder) {
+ this.myBatis = myBatis;
this.permissionTemplateDao = permissionTemplateDao;
this.userDao = userDao;
this.finder = finder;
updater.executeUpdate();
}
+ public void removeGroupFromTemplates(String groupName) {
+ UserSession.get().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN);
+ DbSession session = myBatis.openSession(false);
+ try {
+ GroupDto group = userDao.selectGroupByName(groupName, session);
+ if (group == null) {
+ throw new NotFoundException("Group does not exists : " + groupName);
+ }
+ permissionTemplateDao.removeByGroup(group.getId(), session);
+ session.commit();
+ } finally {
+ MyBatis.closeQuietly(session);
+ }
+ }
+
private void validateTemplateName(@Nullable Long templateId, String templateName) {
if (StringUtils.isEmpty(templateName)) {
String errorMsg = "Name can't be blank";
import org.mockito.runners.MockitoJUnitRunner;
import org.sonar.api.web.UserRole;
import org.sonar.core.permission.*;
+import org.sonar.core.persistence.DbSession;
+import org.sonar.core.persistence.MyBatis;
import org.sonar.core.user.GroupDto;
import org.sonar.core.user.UserDao;
import org.sonar.core.user.UserDto;
@Mock
PermissionFinder finder;
+ @Mock
+ DbSession session;
+
InternalPermissionTemplateService service;
@Rule
@Before
public void setUp() {
MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
- service = new InternalPermissionTemplateService(permissionTemplateDao, userDao, finder);
+
+ MyBatis myBatis = mock(MyBatis.class);
+ when(myBatis.openSession(false)).thenReturn(session);
+ service = new InternalPermissionTemplateService(myBatis, permissionTemplateDao, userDao, finder);
}
@Test
verifyZeroInteractions(userDao);
}
+ @Test
+ public void should_remove_group_from_templates() throws Exception {
+ GroupDto groupDto = new GroupDto().setId(1L).setName("group");
+ when(userDao.selectGroupByName("group", session)).thenReturn(groupDto);
+
+ service.removeGroupFromTemplates("group");
+
+ verify(permissionTemplateDao).removeByGroup(eq(1L), eq(session));
+ }
+
private PermissionTemplateUserDto buildUserPermission(String userName, String permission) {
return new PermissionTemplateUserDto().setUserName(userName).setPermission(permission);
}
verify_post_request
require_parameters :id
group = Group.find(params[:id])
- if group.destroy
- flash[:notice] = 'Group is deleted.'
+ call_backend do
+ Internal.permission_templates.removeGroupFromTemplates(group.name)
+ if group.destroy
+ flash[:notice] = 'Group is deleted.'
+ end
end
to_index(group.errors, nil)
end
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
+
import java.text.Normalizer;
import java.util.Date;
import java.util.List;
}
}
+ /**
+ * Remove a group from all templates (used when removing a group)
+ */
+ public void removeByGroup(Long groupId, SqlSession session) {
+ session.getMapper(PermissionTemplateMapper.class).deleteByGroupId(groupId);
+ }
+
private String generateTemplateKee(String name, Date timeStamp) {
if (PermissionTemplateDto.DEFAULT.getName().equals(name)) {
return PermissionTemplateDto.DEFAULT.getKee();
void insertGroupPermission(PermissionTemplateGroupDto permissionTemplateGroup);
void deleteGroupPermission(PermissionTemplateGroupDto permissionTemplateGroup);
+
+ void deleteByGroupId(long groupId);
}
</choose>
</delete>
+ <delete id="deleteByGroupId" parameterType="long">
+ DELETE FROM perm_templates_groups
+ WHERE group_id = #{groupId}
+ </delete>
+
<select id="selectUsers" parameterType="map" resultType="UserWithPermission">
SELECT u.login as login, u.name as name, ptu.permission_reference as permission
FROM users u
package org.sonar.core.permission;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.utils.System2;
import java.util.List;
import static org.fest.assertions.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.*;
public class PermissionTemplateDaoTest extends AbstractDaoTestCase {
Date now;
PermissionTemplateDao permissionTemplateDao;
+ DbSession session;
System2 system = mock(System2.class);
@Before
public void setUpDao() throws ParseException {
+ session = getMyBatis().openSession(false);
now = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2013-01-02 01:04:05");
when(system.now()).thenReturn(now.getTime());
permissionTemplateDao = new PermissionTemplateDao(getMyBatis(), system);
}
+ @After
+ public void after() {
+ this.session.close();
+ }
+
@Test
public void should_create_permission_template() throws Exception {
setupData("createPermissionTemplate");
checkTable("removeGroupPermissionFromTemplate", "perm_templates_groups", "id", "template_id", "group_id", "permission_reference");
}
+ @Test
+ public void remove_by_group() throws Exception {
+ setupData("remove_by_group");
+ permissionTemplateDao.removeByGroup(2L, session);
+ session.commit();
+
+ checkTable("remove_by_group", "perm_templates_groups", "id", "template_id", "group_id", "permission_reference");
+ }
+
@Test
public void should_add_group_permission_with_null_name() throws Exception {
setupData("addNullGroupPermissionToTemplate");
--- /dev/null
+<dataset>
+ <permission_templates id="1" name="my template" kee="my_template_20130102_030405" description="my description"/>
+ <perm_templates_users/>
+ <perm_templates_groups id="1" template_id="1" group_id="1" permission_reference="remaining_permission_other_group"/>
+</dataset>
--- /dev/null
+<dataset>
+ <permission_templates id="1" name="my template" kee="my_template_20130102_030405" description="my description"/>
+ <perm_templates_users/>
+ <perm_templates_groups id="1" template_id="1" group_id="1" permission_reference="remaining_permission_other_group"/>
+ <perm_templates_groups id="2" template_id="1" group_id="2" permission_reference="permission_to_remove"/>
+ <perm_templates_groups id="3" template_id="1" group_id="2" permission_reference="permission_to_remove2"/>
+</dataset>