From b91145c45e1a8b669421d9e419ee04f0b76d8e6a Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Vilain Date: Mon, 8 Jul 2013 17:35:49 +0200 Subject: [PATCH] SONAR-4466 Added modal windows and controller actions to support permissions changes on users and groups within a template --- .../resources/org/sonar/l10n/core.properties | 3 + .../core/user/PermissionTemplateUserDto.java | 11 ++- .../core/user/PermissionTemplateMapper.xml | 8 +- .../sonar/core/user/PermissionDaoTest.java | 3 + .../selectPermissionTemplate.xml | 4 +- .../InternalPermissionTemplateService.java | 2 +- .../server/permission/PermissionTemplate.java | 22 +++--- .../permission/PermissionTemplateGroup.java | 52 +++++++++++++ .../permission/PermissionTemplateUser.java | 58 ++++++++++++++ .../controllers/api/permissions_controller.rb | 4 +- .../permission_templates_controller.rb | 78 ++++++++++++++++++- .../app/views/layouts/_layout.html.erb | 2 + .../_edit_groups.html.erb | 60 ++++++++++++++ .../permission_templates/_edit_users.html.erb | 60 ++++++++++++++ .../_permission_template_form.html.erb | 2 +- .../views/permission_templates/index.html.erb | 34 ++++---- ...InternalPermissionTemplateServiceTest.java | 8 +- .../permission/PermissionTemplateTest.java | 21 +++-- 18 files changed, 388 insertions(+), 44 deletions(-) create mode 100644 sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateGroup.java create mode 100644 sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateUser.java create mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/_edit_groups.html.erb create mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/_edit_users.html.erb diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties b/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties index 0e2fe22f923..5f59adfa5af 100644 --- a/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties +++ b/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties @@ -2248,12 +2248,15 @@ projects_role.codeviewer.desc=Ability to view the source code of the project. # #------------------------------------------------------------------------------ permission_templates=Permission templates +permission_templates.page=Permission templates permission_template.new_template=New permission template permission_template.create_template=Create permission template permission_template.delete_confirm_title=Delete permission template permission_template.do_you_want_to_delete_template=Are you sure that you want to delete this permission template? permission_template.delete_template=Delete permission template permission_template.edit_template=Edit permission template +permission_template.edit_permissions=Edit permissions +permission_template.update_permissions=Apply template changes #------------------------------------------------------------------------------ diff --git a/sonar-core/src/main/java/org/sonar/core/user/PermissionTemplateUserDto.java b/sonar-core/src/main/java/org/sonar/core/user/PermissionTemplateUserDto.java index bb441bcea98..b0fa21a952b 100644 --- a/sonar-core/src/main/java/org/sonar/core/user/PermissionTemplateUserDto.java +++ b/sonar-core/src/main/java/org/sonar/core/user/PermissionTemplateUserDto.java @@ -29,6 +29,7 @@ public class PermissionTemplateUserDto { private Long userId; private String permission; private String userName; + private String userLogin; private Date createdAt; private Date updatedAt; @@ -68,11 +69,19 @@ public class PermissionTemplateUserDto { return this; } + public String getUserLogin() { + return userLogin; + } + + public PermissionTemplateUserDto setUserLogin(String userLogin) { + this.userLogin = userLogin; + return this; + } + public String getPermission() { return permission; } - public PermissionTemplateUserDto setPermission(String permission) { this.permission = permission; return this; diff --git a/sonar-core/src/main/resources/org/sonar/core/user/PermissionTemplateMapper.xml b/sonar-core/src/main/resources/org/sonar/core/user/PermissionTemplateMapper.xml index d07c5232aab..9e40370798a 100644 --- a/sonar-core/src/main/resources/org/sonar/core/user/PermissionTemplateMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/user/PermissionTemplateMapper.xml @@ -78,7 +78,9 @@ pt.updated_at AS template_updated_at, ptu.id AS permission_template_user_id, ptu.permission_reference AS user_permission, - u.name AS user_name + ptu.user_id AS user_id, + u.name AS user_name, + u.login AS user_login FROM permission_templates pt INNER JOIN perm_templates_users ptu ON ptu.template_id = pt.id INNER JOIN users u ON u.id = ptu.user_id @@ -93,6 +95,7 @@ pt.updated_at AS template_updated_at, ptg.id AS permission_template_group_id, ptg.permission_reference AS group_permission, + ptg.group_id AS group_id, g.name AS group_name FROM permission_templates pt INNER JOIN perm_templates_groups ptg ON ptg.template_id = pt.id @@ -108,11 +111,14 @@ + + + diff --git a/sonar-core/src/test/java/org/sonar/core/user/PermissionDaoTest.java b/sonar-core/src/test/java/org/sonar/core/user/PermissionDaoTest.java index dba245bb5a8..023fe4d405e 100644 --- a/sonar-core/src/test/java/org/sonar/core/user/PermissionDaoTest.java +++ b/sonar-core/src/test/java/org/sonar/core/user/PermissionDaoTest.java @@ -55,9 +55,12 @@ public class PermissionDaoTest extends AbstractDaoTestCase { assertThat(permissionTemplate.getName()).isEqualTo("my template"); assertThat(permissionTemplate.getDescription()).isEqualTo("my description"); assertThat(permissionTemplate.getUsersPermissions()).hasSize(3); + assertThat(permissionTemplate.getUsersPermissions()).onProperty("userId").containsOnly(1L, 2L, 1L); + assertThat(permissionTemplate.getUsersPermissions()).onProperty("userLogin").containsOnly("login1", "login2", "login2"); assertThat(permissionTemplate.getUsersPermissions()).onProperty("userName").containsOnly("user1", "user2", "user2"); assertThat(permissionTemplate.getUsersPermissions()).onProperty("permission").containsOnly("user_permission1", "user_permission1", "user_permission2"); assertThat(permissionTemplate.getGroupsPermissions()).hasSize(3); + assertThat(permissionTemplate.getGroupsPermissions()).onProperty("groupId").containsOnly(1L, 2L, null); assertThat(permissionTemplate.getGroupsPermissions()).onProperty("groupName").containsOnly("group1", "group2", null); assertThat(permissionTemplate.getGroupsPermissions()).onProperty("permission").containsOnly("group_permission1", "group_permission1", "group_permission2"); } diff --git a/sonar-core/src/test/resources/org/sonar/core/user/PermissionDaoTest/selectPermissionTemplate.xml b/sonar-core/src/test/resources/org/sonar/core/user/PermissionDaoTest/selectPermissionTemplate.xml index 91b6e9744eb..dec6ec2ed4f 100644 --- a/sonar-core/src/test/resources/org/sonar/core/user/PermissionDaoTest/selectPermissionTemplate.xml +++ b/sonar-core/src/test/resources/org/sonar/core/user/PermissionDaoTest/selectPermissionTemplate.xml @@ -5,8 +5,8 @@ - - + + diff --git a/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionTemplateService.java b/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionTemplateService.java index f56429a6861..6afe026c32a 100644 --- a/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionTemplateService.java +++ b/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionTemplateService.java @@ -91,7 +91,7 @@ public class InternalPermissionTemplateService implements ServerComponent { permissionDao.deletePermissionTemplate(templateId); } - public void addUserPermission(String templateName, String permission, final String userLogin) { + public void addUserPermission(String templateName, String permission, String userLogin) { PermissionTemplateUpdater updater = new PermissionTemplateUpdater(templateName, permission, userLogin, permissionDao, userDao) { @Override protected void doExecute(Long templateId, String permission) { diff --git a/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplate.java b/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplate.java index a7d51d85355..2b392f97b07 100644 --- a/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplate.java +++ b/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplate.java @@ -35,8 +35,8 @@ public class PermissionTemplate { private final Long id; private final String name; private final String description; - private Multimap usersByPermission; - private Multimap groupsByPermission; + private Multimap usersByPermission; + private Multimap groupsByPermission; private PermissionTemplate(Long id, String name, String description) { this.id = id; @@ -54,12 +54,14 @@ public class PermissionTemplate { new PermissionTemplate(permissionTemplateDto.getId(), permissionTemplateDto.getName(), permissionTemplateDto.getDescription()); if(permissionTemplateDto.getUsersPermissions() != null) { for (PermissionTemplateUserDto userPermission : permissionTemplateDto.getUsersPermissions()) { - permissionTemplate.registerUserPermission(userPermission.getPermission(), userPermission.getUserName()); + permissionTemplate.registerUserPermission(permissionTemplateDto.getId(), userPermission.getUserId(), + userPermission.getUserName(), userPermission.getUserLogin(), userPermission.getPermission()); } } if(permissionTemplateDto.getGroupsPermissions() != null) { for (PermissionTemplateGroupDto groupPermission : permissionTemplateDto.getGroupsPermissions()) { - permissionTemplate.registerGroupPermission(groupPermission.getPermission(), groupPermission.getGroupName()); + permissionTemplate.registerGroupPermission(groupPermission.getPermission(), permissionTemplateDto.getId(), + groupPermission.getGroupId(), groupPermission.getGroupName()); } } return permissionTemplate; @@ -77,19 +79,19 @@ public class PermissionTemplate { return description; } - public List getUsersForPermission(String permission) { + public List getUsersForPermission(String permission) { return ImmutableList.copyOf(usersByPermission.get(permission)); } - public List getGroupsForPermission(String permission) { + public List getGroupsForPermission(String permission) { return ImmutableList.copyOf(groupsByPermission.get(permission)); } - private void registerUserPermission(String permission, String userName) { - usersByPermission.put(permission, userName); + private void registerUserPermission(Long templateId, Long userId, String userName, String userLogin, String permission) { + usersByPermission.put(permission, new PermissionTemplateUser(templateId, userId, userName, userLogin, permission)); } - private void registerGroupPermission(String permission, String groupName) { - groupsByPermission.put(permission, groupName); + private void registerGroupPermission(String permission, Long templateId, Long groupId, String groupName) { + groupsByPermission.put(permission, new PermissionTemplateGroup(templateId, groupId, groupName, permission)); } } diff --git a/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateGroup.java b/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateGroup.java new file mode 100644 index 00000000000..261ca15e618 --- /dev/null +++ b/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateGroup.java @@ -0,0 +1,52 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2013 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.sonar.server.permission; + +public class PermissionTemplateGroup { + + private final Long templateId; + private final Long groupId; + private final String groupName; + private final String permission; + + public PermissionTemplateGroup(Long templateId, Long groupId, String groupName, String permission) { + this.templateId = templateId; + this.groupId = groupId; + this.groupName = groupName; + this.permission = permission; + } + + public Long getTemplateId() { + return templateId; + } + + public Long getGroupId() { + return groupId; + } + + public String getGroupName() { + return groupName; + } + + public String getPermission() { + return permission; + } +} diff --git a/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateUser.java b/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateUser.java new file mode 100644 index 00000000000..c772fd6cf65 --- /dev/null +++ b/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateUser.java @@ -0,0 +1,58 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2013 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.sonar.server.permission; + +public class PermissionTemplateUser { + + private final Long templateId; + private final Long userId; + private final String userName; + private final String userLogin; + private final String permission; + + public PermissionTemplateUser(Long templateId, Long userId, String userName, String userLogin, String permission) { + this.templateId = templateId; + this.userId = userId; + this.userName = userName; + this.userLogin = userLogin; + this.permission = permission; + } + + public Long getUserId() { + return userId; + } + + public String getUserName() { + return userName; + } + + public String getPermission() { + return permission; + } + + public Long getTemplateId() { + return templateId; + } + + public String getUserLogin() { + return userLogin; + } +} diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/permissions_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/permissions_controller.rb index a8acbbfc80c..00f56846093 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/permissions_controller.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/api/permissions_controller.rb @@ -33,7 +33,7 @@ class Api::PermissionsController < Api::ApiController # 'group' is the group identifier (group name or 'anyone') # # -- Example - # curl -X POST -v -u admin:admin 'http://localhost:9000/api/permissions/add?permission=dashboard_sharing&user=new_user' + # curl -X POST -v -u admin:admin 'http://localhost:9000/api/permissions/add?permission=shareDashboard&user=new_user' # # -- Notes # An exception will be raised if both a user and a group are provided @@ -63,7 +63,7 @@ class Api::PermissionsController < Api::ApiController # 'group' is the group identifier (group name or 'anyone') # # -- Example - # curl -X POST -v -u admin:admin 'http://localhost:9000/api/permissions/remove?permission=dashboard_sharing&user=new_user' + # curl -X POST -v -u admin:admin 'http://localhost:9000/api/permissions/remove?permission=shareDashboard&user=new_user' # # -- Notes # An exception will be raised if both a user and a group are provided diff --git a/sonar-server/src/main/webapp/WEB-INF/app/controllers/permission_templates_controller.rb b/sonar-server/src/main/webapp/WEB-INF/app/controllers/permission_templates_controller.rb index 60b25cdb82f..9a2beea3a2c 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/controllers/permission_templates_controller.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/controllers/permission_templates_controller.rb @@ -26,6 +26,9 @@ # class PermissionTemplatesController < ApplicationController + helper RolesHelper + include RolesHelper + SECTION=Navigation::SECTION_CONFIGURATION before_filter :admin_required @@ -34,15 +37,88 @@ class PermissionTemplatesController < ApplicationController # GET # def index - @permission_templates = Internal.permission_templates.selectAllPermissionTemplates + templates_names = Internal.permission_templates.selectAllPermissionTemplates.collect {|t| t.name} + @permission_templates = [] + templates_names.each do |t| + @permission_templates << Internal.permission_templates.selectPermissionTemplate(t) + end end def edit_users + @permission = params[:permission] + @permission_template = Internal.permission_templates.selectPermissionTemplate(params[:name]) + @users_with_permission = @permission_template.getUsersForPermission(params[:permission]).collect {|u| [u.userName, u.userLogin]} + @users_without_permission = all_users.each.collect {|u| [u.name, u.login]} - @users_with_permission + + render :partial => 'permission_templates/edit_users' end def edit_groups + @permission = params[:permission] + @permission_template = Internal.permission_templates.selectPermissionTemplate(params[:name]) + @groups_with_permission = @permission_template.getGroupsForPermission(params[:permission]).collect {|g| [g.groupName, g.groupName]} + @groups_without_permission = all_groups.select {|g| !g.nil?}.each.collect {|g| [g.name, g.name]} - @groups_with_permission + + render :partial => 'permission_templates/edit_groups' + end + + # + # POST + # + def update_users_permissions + verify_post_request + require_parameters :id, :name, :permission + + @permission_template = Internal.permission_templates.selectPermissionTemplate(params[:name]) + + selected_users = params[:users] || [] + + previous_users_with_permission = @permission_template.getUsersForPermission(params[:permission]).collect {|u| [u.userName, u.userLogin]} + new_users_with_permission = all_users.select {|u| selected_users.include?(u.login)}.collect {|u| [u.name, u.login]} + + promoted_users = new_users_with_permission - previous_users_with_permission + demoted_users = previous_users_with_permission - new_users_with_permission + + promoted_users.each do |user| + Internal.permission_templates.addUserPermission(params[:name], params[:permission], user[1]) + end + + demoted_users.each do |user| + Internal.permission_templates.removeUserPermission(params[:name], params[:permission], user[1]) + end + + redirect_to :action => 'index' + end + + # + # POST + # + def update_groups_permissions + verify_post_request + require_parameters :id, :name, :permission + + @permission_template = Internal.permission_templates.selectPermissionTemplate(params[:name]) + + selected_groups = params[:groups] || [] + + previous_groups_with_permission = @permission_template.getGroupsForPermission(params[:permission]).collect {|g| [g.groupName, g.groupName]} + new_groups_with_permission = all_groups.select {|g| !g.nil? && selected_groups.include?(g.name)}.collect {|g| [g.name, g.name]} + + promoted_groups = new_groups_with_permission - previous_groups_with_permission + demoted_groups = previous_groups_with_permission - new_groups_with_permission + + promoted_groups.each do |group| + Internal.permission_templates.addGroupPermission(params[:name], params[:permission], group[1]) + end + + demoted_groups.each do |group| + Internal.permission_templates.removeGroupPermission(params[:name], params[:permission], group[1]) + end + + redirect_to :action => 'index' end + def create_form render :partial => 'permission_templates/permission_template_form', :locals => {:form_action => 'create', :message_title => 'new_template', :message_submit => 'create_template'} diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb index 34f129215a7..4fdcc5c3483 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb @@ -131,6 +131,8 @@ <%= message('user_groups.page') -%>
  • <%= message('global_permissions.page') -%>
  • +
  • + <%= message('permission_templates.page') -%>
  • <%= message('roles.page') -%>
  • diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/_edit_groups.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/_edit_groups.html.erb new file mode 100644 index 00000000000..1284414c6d3 --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/_edit_groups.html.erb @@ -0,0 +1,60 @@ +
    + + + +
    + + + +
    +
    + + diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/_edit_users.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/_edit_users.html.erb new file mode 100644 index 00000000000..9a2b7256cba --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/_edit_users.html.erb @@ -0,0 +1,60 @@ +
    + + + +
    + + + +
    +
    + + diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/_permission_template_form.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/_permission_template_form.html.erb index a2203f7f1f8..2cf0a83d435 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/_permission_template_form.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/_permission_template_form.html.erb @@ -19,7 +19,7 @@ diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/index.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/index.html.erb index 9c20a5811b5..f288b43da04 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/index.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/permission_templates/index.html.erb @@ -11,7 +11,9 @@ <%= message('name') -%> - + Administrators + Users + Code viewers <%= message('operations') -%> @@ -29,33 +31,39 @@ <% - users=Api::Utils.insensitive_sort(permission_template.getUsersForPermission('admin')) - groups=Api::Utils.insensitive_sort(permission_template.getGroupsForPermission('admin')) + users=Api::Utils.insensitive_sort(permission_template.getUsersForPermission('admin').collect {|u| u.userName}) + groups=Api::Utils.insensitive_sort(permission_template.getGroupsForPermission('admin').collect {|g| g.groupName}) %> <%= users.join(', ') %> - (select users)
    + (<%= link_to message('select users'), {:action => :edit_users, :name => permission_template.name, :permission => 'admin'}, + :id => "selectu-admin-#{u permission_template.name}", :class => 'open-modal link-action', 'modal-width' => '760px' %>)
    <%= groups.join(', ') %> - (select groups) + (<%= link_to message('select groups'), {:action => :edit_groups, :name => permission_template.name, :permission => 'admin'}, + :id => "selectg-admin-#{u permission_template.name}", :class => 'open-modal link-action', 'modal-width' => '760px' %>) <% - users=Api::Utils.insensitive_sort(permission_template.getUsersForPermission('user')) - groups=Api::Utils.insensitive_sort(permission_template.getGroupsForPermission('groups')) + users=Api::Utils.insensitive_sort(permission_template.getUsersForPermission('user').collect {|u| u.userName}) + groups=Api::Utils.insensitive_sort(permission_template.getGroupsForPermission('user').collect {|g| g.groupName}) %> <%= users.join(', ') %> - (select users)
    + (<%= link_to message('select users'), {:action => :edit_users, :name => permission_template.name, :permission => 'user'}, + :id => "selectu-user-#{u permission_template.name}", :class => 'open-modal link-action', 'modal-width' => '760px' %>)
    <%= groups.join(', ') %> - (select groups) + (<%= link_to message('select groups'), {:action => :edit_groups, :name => permission_template.name, :permission => 'user'}, + :id => "selectg-user-#{u permission_template.name}", :class => 'open-modal link-action', 'modal-width' => '760px' %>) <% - users=Api::Utils.insensitive_sort(permission_template.getUsersForPermission('codeviewer')) - groups=Api::Utils.insensitive_sort(permission_template.getGroupsForPermission('codeviewer')) + users=Api::Utils.insensitive_sort(permission_template.getUsersForPermission('codeviewer').collect {|u| u.userName}) + groups=Api::Utils.insensitive_sort(permission_template.getGroupsForPermission('codeviewer').collect {|g| g.groupName}) %> <%= users.join(', ') %> - (select users)
    + (<%= link_to message('select users'), {:action => :edit_users, :name => permission_template.name, :permission => 'codeviewer'}, + :id => "selectu-codeviewer-#{u permission_template.name}", :class => 'open-modal link-action', 'modal-width' => '760px' %>)
    <%= groups.join(', ') %> - (select groups) + (<%= link_to message('select groups'), {:action => :edit_groups, :name => permission_template.name, :permission => 'codeviewer'}, + :id => "selectg-codeviewer-#{u permission_template.name}", :class => 'open-modal link-action', 'modal-width' => '760px' %>) <%= link_to message('edit'), {:action => :edit_form, :name => permission_template.name}, diff --git a/sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionTemplateServiceTest.java b/sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionTemplateServiceTest.java index a119ce86cc8..4d765bf4682 100644 --- a/sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionTemplateServiceTest.java +++ b/sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionTemplateServiceTest.java @@ -116,11 +116,11 @@ public class InternalPermissionTemplateServiceTest { PermissionTemplate permissionTemplate = permissionTemplateService.selectPermissionTemplate("my template"); assertThat(permissionTemplate.getUsersForPermission(Permission.DASHBOARD_SHARING.key())).isEmpty(); - assertThat(permissionTemplate.getUsersForPermission(Permission.SCAN_EXECUTION.key())).containsOnly("user_scan", "user_scan_and_dry_run"); - assertThat(permissionTemplate.getUsersForPermission(Permission.DRY_RUN_EXECUTION.key())).containsOnly("user_dry_run", "user_scan_and_dry_run"); + assertThat(permissionTemplate.getUsersForPermission(Permission.SCAN_EXECUTION.key())).onProperty("userName").containsOnly("user_scan", "user_scan_and_dry_run"); + assertThat(permissionTemplate.getUsersForPermission(Permission.DRY_RUN_EXECUTION.key())).onProperty("userName").containsOnly("user_dry_run", "user_scan_and_dry_run"); assertThat(permissionTemplate.getGroupsForPermission(Permission.DASHBOARD_SHARING.key())).isEmpty(); - assertThat(permissionTemplate.getGroupsForPermission(Permission.SCAN_EXECUTION.key())).containsOnly("scan_group"); - assertThat(permissionTemplate.getGroupsForPermission(Permission.SYSTEM_ADMIN.key())).containsOnly("admin_group"); + assertThat(permissionTemplate.getGroupsForPermission(Permission.SCAN_EXECUTION.key())).onProperty("groupName").containsOnly("scan_group"); + assertThat(permissionTemplate.getGroupsForPermission(Permission.SYSTEM_ADMIN.key())).onProperty("groupName").containsOnly("admin_group"); } @Test diff --git a/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateTest.java b/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateTest.java index 3b23c4b7160..6556607f6a5 100644 --- a/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateTest.java +++ b/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateTest.java @@ -38,13 +38,13 @@ public class PermissionTemplateTest { .setName("name") .setDescription("description") .setUsersPermissions(Lists.newArrayList( - new PermissionTemplateUserDto().setId(1L).setUserName("user1").setPermission("permission1"), - new PermissionTemplateUserDto().setId(2L).setUserName("user1").setPermission("permission2"), - new PermissionTemplateUserDto().setId(3L).setUserName("user2").setPermission("permission1") + new PermissionTemplateUserDto().setId(1L).setUserId(1L).setUserName("user1").setUserLogin("login1").setPermission("permission1"), + new PermissionTemplateUserDto().setId(2L).setUserId(1L).setUserName("user1").setUserLogin("login1").setPermission("permission2"), + new PermissionTemplateUserDto().setId(3L).setUserId(2L).setUserName("user2").setUserLogin("login2").setPermission("permission1") )) .setGroupsByPermission(Lists.newArrayList( - new PermissionTemplateGroupDto().setId(1L).setGroupName("group1").setPermission("permission3"), - new PermissionTemplateGroupDto().setId(2L).setGroupName("group2").setPermission("permission3") + new PermissionTemplateGroupDto().setId(1L).setGroupId(1L).setGroupName("group1").setPermission("permission3"), + new PermissionTemplateGroupDto().setId(2L).setGroupId(2L).setGroupName("group2").setPermission("permission3") )); PermissionTemplate permissionTemplate = PermissionTemplate.create(permissionTemplateDto); @@ -53,8 +53,13 @@ public class PermissionTemplateTest { assertThat(permissionTemplate.getName()).isEqualTo("name"); assertThat(permissionTemplate.getDescription()).isEqualTo("description"); assertThat(permissionTemplate.getUsersForPermission("unmatchedPermission")).isEmpty(); - assertThat(permissionTemplate.getUsersForPermission("permission1")).containsOnly("user1", "user2"); - assertThat(permissionTemplate.getUsersForPermission("permission2")).containsOnly("user1"); - assertThat(permissionTemplate.getGroupsForPermission("permission3")).containsOnly("group1", "group2"); + assertThat(permissionTemplate.getUsersForPermission("permission1")).onProperty("userName").containsOnly("user1", "user2"); + assertThat(permissionTemplate.getUsersForPermission("permission1")).onProperty("userId").containsOnly(1L, 2L); + assertThat(permissionTemplate.getUsersForPermission("permission1")).onProperty("userLogin").containsOnly("login1", "login2"); + assertThat(permissionTemplate.getUsersForPermission("permission2")).onProperty("userName").containsOnly("user1"); + assertThat(permissionTemplate.getUsersForPermission("permission2")).onProperty("userId").containsOnly(1L); + assertThat(permissionTemplate.getUsersForPermission("permission2")).onProperty("userLogin").containsOnly("login1"); + assertThat(permissionTemplate.getGroupsForPermission("permission3")).onProperty("groupName").containsOnly("group1", "group2"); + assertThat(permissionTemplate.getGroupsForPermission("permission3")).onProperty("groupId").containsOnly(1L, 2L); } } -- 2.39.5