Skip to content

Commit 0f8ac5e

Browse files
authored
Merge pull request #2098 from objectcomputing/develop
Admin permissions permission and remove guild restriction
2 parents d790168 + ec3cecd commit 0f8ac5e

File tree

13 files changed

+194
-45
lines changed

13 files changed

+194
-45
lines changed

server/src/main/java/com/objectcomputing/checkins/security/permissions/Permissions.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public enum Permissions {
88
CAN_DELETE_ORGANIZATION_MEMBERS,
99
CAN_CREATE_ORGANIZATION_MEMBERS,
1010
CAN_VIEW_ROLE_PERMISSIONS,
11+
CAN_ASSIGN_ROLE_PERMISSIONS,
1112
CAN_VIEW_PERMISSIONS,
1213
CAN_VIEW_SKILLS_REPORT,
1314
CAN_VIEW_RETENTION_REPORT,

server/src/main/java/com/objectcomputing/checkins/services/permissions/PermissionRepository.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ public interface PermissionRepository extends CrudRepository<Permission, UUID> {
2424
" ON permissions.id = role_permissions.permissionid " +
2525
"WHERE member_profile.id = :id")
2626
List<Permission> findUserPermissions(UUID id);
27-
27+
28+
List<Permission> findByPermission(String permission);
29+
2830
@NonNull
2931
List<Permission> findAll();
3032

server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionController.java

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44
import com.objectcomputing.checkins.services.permissions.RequiredPermission;
55
import io.micronaut.http.HttpResponse;
66
import io.micronaut.http.MediaType;
7-
import io.micronaut.http.annotation.Consumes;
8-
import io.micronaut.http.annotation.Controller;
9-
import io.micronaut.http.annotation.Get;
10-
import io.micronaut.http.annotation.Produces;
7+
import io.micronaut.http.annotation.*;
118
import io.micronaut.scheduling.TaskExecutors;
129
import io.micronaut.security.annotation.Secured;
1310
import io.micronaut.security.rules.SecurityRule;
@@ -18,7 +15,9 @@
1815
import reactor.core.scheduler.Scheduler;
1916
import reactor.core.scheduler.Schedulers;
2017

18+
import javax.validation.Valid;
2119
import java.util.List;
20+
import java.util.UUID;
2221
import java.util.concurrent.ExecutorService;
2322

2423
@Secured(SecurityRule.IS_AUTHENTICATED)
@@ -47,11 +46,34 @@ public RolePermissionController(RolePermissionServices rolePermissionServices,
4746
*/
4847
@RequiredPermission(Permissions.CAN_VIEW_ROLE_PERMISSIONS)
4948
@Get
50-
public Mono<HttpResponse<List<RolePermissionResponseDTO>>> getAllRolePermissions() {
49+
public Mono<HttpResponse<List<RolePermissionsResponseDTO>>> getAllRolePermissions() {
5150

5251
return Mono.fromCallable(rolePermissionServices::findAll)
5352
.publishOn(Schedulers.fromExecutor(eventLoopGroup))
54-
.map(rolePermissions -> (HttpResponse<List<RolePermissionResponseDTO>>) HttpResponse.ok(rolePermissions))
53+
.map(rolePermissions -> (HttpResponse<List<RolePermissionsResponseDTO>>) HttpResponse.ok(rolePermissions))
5554
.subscribeOn(scheduler);
5655
}
56+
57+
@RequiredPermission(Permissions.CAN_ASSIGN_ROLE_PERMISSIONS)
58+
@Post("/")
59+
public Mono<HttpResponse<RolePermissionDTO>> save(@Body @Valid RolePermissionDTO rolePermission) {
60+
return Mono.fromCallable(() -> rolePermissionServices.save(rolePermission.getRoleId(), rolePermission.getPermissionId()))
61+
.publishOn(Schedulers.fromExecutor(eventLoopGroup))
62+
.map(savedRolePermission -> (HttpResponse<RolePermissionDTO>) HttpResponse
63+
.created(fromEntity(savedRolePermission)))
64+
.subscribeOn(scheduler);
65+
}
66+
67+
@RequiredPermission(Permissions.CAN_ASSIGN_ROLE_PERMISSIONS)
68+
@Delete("/")
69+
public Mono<HttpResponse> delete(@Body RolePermissionDTO dto) {
70+
71+
return Mono.fromRunnable(() -> rolePermissionServices.delete(dto.getRoleId(), dto.getPermissionId()))
72+
.publishOn(Schedulers.fromExecutor(eventLoopGroup))
73+
.subscribeOn(scheduler).thenReturn(HttpResponse.ok());
74+
}
75+
76+
private RolePermissionDTO fromEntity(RolePermission rolePermission) {
77+
return new RolePermissionDTO(rolePermission.getRoleId(), rolePermission.getPermissionId());
78+
}
5779
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.objectcomputing.checkins.services.role.role_permissions;
2+
3+
import io.micronaut.core.annotation.Introspected;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
6+
import javax.validation.constraints.NotNull;
7+
import java.util.UUID;
8+
9+
@Introspected
10+
public class RolePermissionDTO {
11+
12+
@NotNull
13+
@Schema(description = "id of the role", required = true)
14+
private UUID roleId;
15+
16+
@NotNull
17+
@Schema(description = "id of the permission", required = true)
18+
private UUID permissionId;
19+
20+
public RolePermissionDTO(UUID roleId, UUID permissionId) {
21+
this.roleId = roleId;
22+
this.permissionId = permissionId;
23+
}
24+
25+
public UUID getRoleId() {
26+
return roleId;
27+
}
28+
29+
public void setRoleId(UUID roleId) {
30+
this.roleId = roleId;
31+
}
32+
33+
public UUID getPermissionId() {
34+
return permissionId;
35+
}
36+
37+
public void setPermissionId(UUID permissionId) {
38+
this.permissionId = permissionId;
39+
}
40+
41+
@Override
42+
public String toString() {
43+
final StringBuilder sb = new StringBuilder("RolePermissionCreateDTO{");
44+
sb.append("roleId=").append(roleId);
45+
sb.append(", permissionId=").append(permissionId);
46+
sb.append('}');
47+
return sb.toString();
48+
}
49+
}

server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionRepository.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,17 @@ public interface RolePermissionRepository extends CrudRepository<RolePermission,
1616
" (roleid, permissionid) " +
1717
"VALUES " +
1818
" (:roleid, :permissionid)")
19-
RolePermission saveByIds(UUID roleid, UUID permissionid);
19+
void saveByIds(String roleid, String permissionid);
20+
21+
@Query("SELECT * from role_permissions " +
22+
"WHERE roleid = :roleid " +
23+
"AND permissionid = :permissionid")
24+
List<RolePermission> findByIds(String roleid, String permissionid);
25+
26+
@Query("DELETE FROM role_permissions " +
27+
"WHERE roleid = :roleid " +
28+
"AND permissionid = :permissionid")
29+
void deleteByIds(String roleid, String permissionid);
2030

2131
@NonNull
2232
List<RolePermission> findAll();
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
package com.objectcomputing.checkins.services.role.role_permissions;
22

33
import java.util.List;
4+
import java.util.UUID;
45

56
public interface RolePermissionServices {
6-
List<RolePermissionResponseDTO> findAll();
7+
List<RolePermissionsResponseDTO> findAll();
8+
9+
RolePermission save(UUID roleId, UUID permissionId);
10+
11+
void delete(UUID roleId, UUID permissionId);
712
}

server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionServicesImpl.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.util.ArrayList;
1010
import java.util.List;
1111
import java.util.Optional;
12+
import java.util.UUID;
1213

1314
@Singleton
1415
public class RolePermissionServicesImpl implements RolePermissionServices {
@@ -25,8 +26,8 @@ public RolePermissionServicesImpl(RolePermissionRepository rolePermissionReposit
2526
this.permissionServices = permissionServices;
2627
}
2728

28-
public List<RolePermissionResponseDTO> findAll() {
29-
List<RolePermissionResponseDTO> roleInfo = new ArrayList<>();
29+
public List<RolePermissionsResponseDTO> findAll() {
30+
List<RolePermissionsResponseDTO> roleInfo = new ArrayList<>();
3031
List<RolePermission> records = rolePermissionRepository.findAll();
3132
List<Role> roles = roleServices.findAllRoles();
3233
List<Permission> permissions = permissionServices.findAll();
@@ -40,14 +41,26 @@ public List<RolePermissionResponseDTO> findAll() {
4041
}
4142
}
4243

43-
RolePermissionResponseDTO rolePermissionResponseDTO = new RolePermissionResponseDTO();
44-
rolePermissionResponseDTO.setRoleId(role.getId());
45-
rolePermissionResponseDTO.setRole(role.getRole());
46-
rolePermissionResponseDTO.setDescription(role.getDescription());
47-
rolePermissionResponseDTO.setPermissions(permissionsAssociatedWithRole);
48-
roleInfo.add(rolePermissionResponseDTO);
44+
RolePermissionsResponseDTO rolePermissionsResponseDTO = new RolePermissionsResponseDTO();
45+
rolePermissionsResponseDTO.setRoleId(role.getId());
46+
rolePermissionsResponseDTO.setRole(role.getRole());
47+
rolePermissionsResponseDTO.setDescription(role.getDescription());
48+
rolePermissionsResponseDTO.setPermissions(permissionsAssociatedWithRole);
49+
roleInfo.add(rolePermissionsResponseDTO);
4950
}
5051

5152
return roleInfo;
5253
}
54+
55+
@Override
56+
public RolePermission save(UUID roleId, UUID permissionId) {
57+
rolePermissionRepository.saveByIds(roleId.toString(), permissionId.toString());
58+
RolePermission saved = rolePermissionRepository.findByIds(roleId.toString(), permissionId.toString()).get(0);
59+
return saved;
60+
}
61+
62+
@Override
63+
public void delete(UUID roleId, UUID permissionId) {
64+
rolePermissionRepository.deleteByIds(roleId.toString(), permissionId.toString());
65+
}
5366
}

server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionResponseDTO.java renamed to server/src/main/java/com/objectcomputing/checkins/services/role/role_permissions/RolePermissionsResponseDTO.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import java.util.UUID;
1111

1212
@Introspected
13-
public class RolePermissionResponseDTO {
13+
public class RolePermissionsResponseDTO {
1414

1515
@NotNull
1616
@Schema(description = "id of the role", required = true)

server/src/main/resources/db/dev/R__Load_testing_data.sql

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,11 @@ insert into permissions
576576
values
577577
('1fd790d9-df9a-4201-818b-3a9ac5e5be3b', 'CAN_VIEW_ROLE_PERMISSIONS');
578578

579+
insert into permissions
580+
(id, permission)
581+
values
582+
('ba001065-bfef-41cc-a03d-6e168ba1c244', 'CAN_ASSIGN_ROLE_PERMISSIONS');
583+
579584
insert into permissions
580585
(id, permission)
581586
values
@@ -659,6 +664,11 @@ insert into role_permissions
659664
values
660665
('e8a4fff8-e984-4e59-be84-a713c9fa8d23', '1fd790d9-df9a-4201-818b-3a9ac5e5be3b'); -- CAN_VIEW_ROLE_PERMISSIONS
661666

667+
insert into role_permissions
668+
(roleid, permissionid)
669+
values
670+
('e8a4fff8-e984-4e59-be84-a713c9fa8d23', 'ba001065-bfef-41cc-a03d-6e168ba1c244'); -- CAN_ASSIGN_ROLE_PERMISSIONS
671+
662672
insert into role_permissions
663673
(roleid, permissionid)
664674
values

server/src/test/java/com/objectcomputing/checkins/services/fixture/PermissionFixture.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ public interface PermissionFixture extends RepositoryFixture, RolePermissionFixt
5050
Permissions.CAN_VIEW_PROFILE_REPORT,
5151
Permissions.CAN_CREATE_CHECKINS,
5252
Permissions.CAN_VIEW_CHECKINS,
53-
Permissions.CAN_UPDATE_CHECKINS
53+
Permissions.CAN_UPDATE_CHECKINS,
54+
Permissions.CAN_ASSIGN_ROLE_PERMISSIONS
5455
);
5556

5657
default Permission createACustomPermission(Permissions perm) {

0 commit comments

Comments
 (0)