Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package com.objectcomputing.checkins.services.permissions;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.annotation.JsonCreator;
import io.micronaut.core.annotation.Introspected;

@Introspected
@JsonSerialize(using = PermissionSerializer.class)
public enum Permission {
CAN_VIEW_FEEDBACK_REQUEST("View feedback requests", "Feedback"),
CAN_CREATE_FEEDBACK_REQUEST("Create feedback requests", "Feedback"),
Expand Down Expand Up @@ -33,13 +36,23 @@ public enum Permission {
this.category = category;
}


public String getDescription() {
return description;
}

public String getCategory() {
return category;
}

// Use the fromName method as @JsonCreator
@JsonCreator
public static Permission fromName(String name) {
for (Permission permission : values()) {
if (permission.name().equalsIgnoreCase(name)) {
return permission;
}
}
throw new UnsupportedOperationException(String.format("Unknown permission: '%s'", name));
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package com.objectcomputing.checkins.services.permissions;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.micronaut.core.annotation.Introspected;

import java.util.Objects;

@Introspected
public class PermissionDTO {

private String permission;
private String description;

public PermissionDTO() {}

public PermissionDTO(String permission, String description, String category) {
this.permission = permission;
this.description = description;
this.category = category;
}

private String category;

public PermissionDTO(Permission permission) {
this.permission = permission.name();
this.description = permission.getDescription();
this.category = permission.getCategory();
}

public String getPermission() {
return permission;
}

public void setPermission(String permission) {
this.permission = permission;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

public String getCategory() {
return category;
}

public void setCategory(String category) {
this.category = category;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PermissionDTO that = (PermissionDTO) o;
return Objects.equals(permission, that.permission) && Objects.equals(description, that.description) && Objects.equals(category, that.category);
}

@Override
public int hashCode() {
return Objects.hash(permission, description, category);
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.objectcomputing.checkins.services.permissions;

import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

public class PermissionSerializer extends StdSerializer<Permission> {

public PermissionSerializer() {
super(Permission.class);
}

public PermissionSerializer(Class t) {
super(t);
}

public void serialize(
Permission permission, JsonGenerator generator, SerializerProvider provider)
throws IOException {
generator.writeStartObject();
generator.writeFieldName("permission");
generator.writeString(permission.name());
generator.writeFieldName("description");
generator.writeString(permission.getDescription());
generator.writeFieldName("category");
generator.writeString(permission.getCategory());
generator.writeEndObject();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.objectcomputing.checkins.services.role.role_permissions;

;
import com.objectcomputing.checkins.services.permissions.Permission;
import com.objectcomputing.checkins.services.permissions.RequiredPermission;
import io.micronaut.http.HttpResponse;
Expand Down Expand Up @@ -57,10 +56,10 @@ public Mono<HttpResponse<List<RolePermissionsResponseDTO>>> getAllRolePermission

@RequiredPermission(Permission.CAN_ASSIGN_ROLE_PERMISSIONS)
@Post("/")
public Mono<HttpResponse<RolePermissionDTO>> save(@Body @Valid RolePermissionDTO rolePermission) {
return Mono.fromCallable(() -> rolePermissionServices.save(rolePermission.getRoleId(), rolePermission.getPermissionId()))
public Mono<HttpResponse<RolePermissionResponseDTO>> save(@Body @Valid RolePermissionDTO rolePermission) {
return Mono.fromCallable(() -> rolePermissionServices.save(rolePermission.getRoleId(), Permission.fromName(rolePermission.getPermission())))
.publishOn(Schedulers.fromExecutor(eventLoopGroup))
.map(savedRolePermission -> (HttpResponse<RolePermissionDTO>) HttpResponse
.map(savedRolePermission -> (HttpResponse<RolePermissionResponseDTO>) HttpResponse
.created(fromEntity(savedRolePermission)))
.subscribeOn(scheduler);
}
Expand All @@ -69,12 +68,12 @@ public Mono<HttpResponse<RolePermissionDTO>> save(@Body @Valid RolePermissionDTO
@Delete("/")
public Mono<MutableHttpResponse<Object>> delete(@Body RolePermissionDTO dto) {

return Mono.fromRunnable(() -> rolePermissionServices.delete(dto.getRoleId(), dto.getPermissionId()))
return Mono.fromRunnable(() -> rolePermissionServices.delete(dto.getRoleId(), Permission.fromName(dto.getPermission())))
.publishOn(Schedulers.fromExecutor(eventLoopGroup))
.subscribeOn(scheduler).thenReturn(HttpResponse.ok());
}

private RolePermissionDTO fromEntity(RolePermission rolePermission) {
return new RolePermissionDTO(rolePermission.getRoleId(), rolePermission.getPermission());
private RolePermissionResponseDTO fromEntity(RolePermission rolePermission) {
return new RolePermissionResponseDTO(rolePermission.getRoleId(), rolePermission.getPermission());
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.objectcomputing.checkins.services.role.role_permissions;

import com.objectcomputing.checkins.services.permissions.Permission;
import com.objectcomputing.checkins.services.permissions.PermissionDTO;
import io.micronaut.core.annotation.Introspected;
import io.swagger.v3.oas.annotations.media.Schema;

Expand All @@ -14,12 +15,12 @@ public class RolePermissionDTO {
@Schema(description = "id of the role", required = true)
private UUID roleId;

@Schema(description = "id of the permission", required = true)
private Permission permissionId;
@Schema(description = "the permission", required = true)
private String permission;

public RolePermissionDTO(UUID roleId, Permission permissionId) {
public RolePermissionDTO(UUID roleId, Permission permission) {
this.roleId = roleId;
this.permissionId = permissionId;
this.permission = permission.name();
}

public UUID getRoleId() {
Expand All @@ -30,19 +31,19 @@ public void setRoleId(UUID roleId) {
this.roleId = roleId;
}

public Permission getPermissionId() {
return permissionId;
public String getPermission() {
return permission;
}

public void setPermissionId(Permission permissionId) {
this.permissionId = permissionId;
public void setPermission(String permission) {
this.permission = permission;
}

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("RolePermissionCreateDTO{");
sb.append("roleId=").append(roleId);
sb.append(", permissionId=").append(permissionId);
sb.append(", permission=").append(permission);
sb.append('}');
return sb.toString();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.objectcomputing.checkins.services.role.role_permissions;

import com.objectcomputing.checkins.services.permissions.Permission;
import io.micronaut.core.annotation.Introspected;
import io.swagger.v3.oas.annotations.media.Schema;

import javax.validation.constraints.NotNull;
import java.util.UUID;

@Introspected
public class RolePermissionResponseDTO {

@NotNull
@Schema(description = "id of the role", required = true)
private UUID roleId;

@Schema(description = "the permission", required = true)
private Permission permission;

public RolePermissionResponseDTO(UUID roleId, Permission permission) {
this.roleId = roleId;
this.permission = permission;
}

public UUID getRoleId() {
return roleId;
}

public void setRoleId(UUID roleId) {
this.roleId = roleId;
}

public Permission getPermission() {
return permission;
}

public void setPermission(Permission permission) {
this.permission = permission;
}

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("RolePermissionCreateDTO{");
sb.append("roleId=").append(roleId);
sb.append(", permission=").append(permission);
sb.append('}');
return sb.toString();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.objectcomputing.checkins.services.role.role_permissions;

import com.objectcomputing.checkins.services.permissions.Permission;
import com.objectcomputing.checkins.services.permissions.PermissionDTO;
import com.objectcomputing.checkins.services.permissions.PermissionServices;
import com.objectcomputing.checkins.services.role.Role;
import com.objectcomputing.checkins.services.role.RoleServices;
Expand Down Expand Up @@ -45,7 +46,7 @@ public List<RolePermissionsResponseDTO> findAll() {
rolePermissionsResponseDTO.setRoleId(role.getId());
rolePermissionsResponseDTO.setRole(role.getRole());
rolePermissionsResponseDTO.setDescription(role.getDescription());
rolePermissionsResponseDTO.setPermissions(permissionsAssociatedWithRole);
rolePermissionsResponseDTO.setPermissions(permissionsAssociatedWithRole.stream().map((Permission permission) -> new PermissionDTO(permission)).collect(Collectors.toList()));
roleInfo.add(rolePermissionsResponseDTO);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.objectcomputing.checkins.services.role.role_permissions;

import com.objectcomputing.checkins.services.permissions.Permission;
import com.objectcomputing.checkins.services.permissions.PermissionDTO;
import io.micronaut.core.annotation.Introspected;
import io.micronaut.core.annotation.Nullable;
import io.swagger.v3.oas.annotations.media.Schema;
Expand All @@ -16,7 +17,7 @@ public class RolePermissionsResponseDTO {
@Schema(description = "id of the role", required = true)
private UUID roleId;

@NotNull
@Nullable
@Schema(description = "The name of the role", required = true)
private String role;

Expand All @@ -26,7 +27,7 @@ public class RolePermissionsResponseDTO {

@NotNull
@Schema(description = "List of Permissions associated with this role", required = true)
private List<Permission> permissions;
private List<PermissionDTO> permissions;

public UUID getRoleId() {
return roleId;
Expand All @@ -36,11 +37,12 @@ public void setRoleId(UUID roleId) {
this.roleId = roleId;
}

@Nullable
public String getRole() {
return role;
}

public void setRole(String role) {
public void setRole(@Nullable String role) {
this.role = role;
}

Expand All @@ -53,11 +55,11 @@ public void setDescription(@Nullable String description) {
this.description = description;
}

public List<Permission> getPermissions() {
public List<PermissionDTO> getPermissions() {
return permissions;
}

public void setPermissions(List<Permission> permissions) {
public void setPermissions(List<PermissionDTO> permissions) {
this.permissions = permissions;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
Expand All @@ -42,12 +43,12 @@ void testGetAllPermissionsEnsureAlphabeticalOrder() {
MemberProfile user = createADefaultMemberProfile();
assignMemberRole(user);

List<Permission> expected = List.of(Permission.values());
List<PermissionDTO> expected = List.of(Permission.values()).stream().map((permission) -> new PermissionDTO(permission)).collect(Collectors.toList());
final HttpRequest<Object> request = HttpRequest.
GET("/OrderByPermission").basicAuth(user.getWorkEmail(), RoleType.Constants.MEMBER_ROLE);

final HttpResponse<List<Permission>> response =
client.toBlocking().exchange(request, Argument.listOf(Permission.class));
final HttpResponse<List<PermissionDTO>> response =
client.toBlocking().exchange(request, Argument.listOf(PermissionDTO.class));

assertEquals(HttpStatus.OK, response.getStatus());
assertTrue(response.getBody().isPresent());
Expand All @@ -74,20 +75,20 @@ void testGetAllPermissions() {
MemberProfile user = createADefaultMemberProfile();
assignMemberRole(user);

List<Permission> expected = List.of(Permission.values());
List<PermissionDTO> expected = List.of(Permission.values()).stream().map((permission) -> new PermissionDTO(permission)).collect(Collectors.toList());
final HttpRequest<Object> request = HttpRequest.
GET("/").basicAuth(user.getWorkEmail(), RoleType.Constants.MEMBER_ROLE);

final HttpResponse<List<Permission>> response =
client.toBlocking().exchange(request, Argument.listOf(Permission.class));
final HttpResponse<List<PermissionDTO>> response =
client.toBlocking().exchange(request, Argument.listOf(PermissionDTO.class));

assertEquals(HttpStatus.OK, response.getStatus());
assertTrue(response.getBody().isPresent());
assertEquals(expected, response.getBody().get());
}

@Test
void getAllPermissionsnIsNotAuthenticatedThrowsError() {
void getAllPermissionsIsNotAuthenticatedThrowsError() {
final HttpRequest<Object> request = HttpRequest.GET("/");

HttpClientResponseException responseException = assertThrows(HttpClientResponseException.class,
Expand Down
Loading