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
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>edu.stanford.protege</groupId>
<artifactId>webprotege-authorization</artifactId>
<version>2.0.1</version>
<version>2.1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package edu.stanford.protege.webprotege.authorization;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import edu.stanford.protege.webprotege.common.ProjectId;
import edu.stanford.protege.webprotege.common.ProjectRequest;

@JsonTypeName(GetProjectRoleAssignmentsRequest.CHANNEL)
public record GetProjectRoleAssignmentsRequest(@JsonProperty("projectId") ProjectId projectId) implements ProjectRequest<GetProjectRoleAssignmentsResponse> {

public static final String CHANNEL = "webprotege.authorization.GetProjectRoleAssignments";

@Override
public String getChannel() {
return CHANNEL;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package edu.stanford.protege.webprotege.authorization;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import edu.stanford.protege.webprotege.common.Response;

import java.util.Objects;

@JsonTypeName(GetProjectRoleAssignmentsRequest.CHANNEL)
public record GetProjectRoleAssignmentsResponse(@JsonProperty("assignments") ProjectRoleAssignments assignments) implements Response {

@JsonCreator
public GetProjectRoleAssignmentsResponse(@JsonProperty("assignments") ProjectRoleAssignments assignments) {
this.assignments = Objects.requireNonNull(assignments);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package edu.stanford.protege.webprotege.authorization;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.List;
import java.util.Objects;

public record ProjectRoleAssignments(@JsonProperty("userAssignments") List<UserRoleAssignment> userAssignments) {

@JsonCreator
public ProjectRoleAssignments(@JsonProperty("userAssignments" ) List<UserRoleAssignment> userAssignments) {
this.userAssignments = Objects.requireNonNull(userAssignments);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package edu.stanford.protege.webprotege.authorization;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import edu.stanford.protege.webprotege.common.ProjectId;
import edu.stanford.protege.webprotege.common.ProjectRequest;

import static edu.stanford.protege.webprotege.authorization.ResetProjectRoleDefinitionsRequest.CHANNEL;

@JsonTypeName(CHANNEL)
public record ResetProjectRoleDefinitionsRequest(@JsonProperty("projectId") ProjectId projectId) implements ProjectRequest<ResetProjectRoleDefinitionsResponse> {

public static final String CHANNEL = "webprotege.authorization.ResetProjectRoleDefinitions";

@Override
public String getChannel() {
return CHANNEL;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package edu.stanford.protege.webprotege.authorization;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import edu.stanford.protege.webprotege.common.Response;

import java.util.List;
import java.util.Objects;

@JsonTypeName(ResetProjectRoleDefinitionsRequest.CHANNEL)
public record ResetProjectRoleDefinitionsResponse(@JsonProperty("roleDefinitions") List<RoleDefinition> roleDefinitions) implements Response {

public ResetProjectRoleDefinitionsResponse(@JsonProperty("roleDefinitions" ) List<RoleDefinition> roleDefinitions) {
this.roleDefinitions = List.copyOf(Objects.requireNonNull(roleDefinitions));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
Expand All @@ -14,17 +15,20 @@ public record RoleDefinition(@Nonnull @JsonProperty("roleId") RoleId roleId,
@Nonnull @JsonProperty("roleType") RoleType roleType,
@Nonnull @JsonProperty("parentRoles") Set<RoleId> parentRoles,
@Nonnull @JsonProperty("roleCapabilities") Set<Capability> roleCapabilities,
@Nonnull @JsonProperty("label") String label,
@Nonnull @JsonProperty("description") String description) {

public RoleDefinition(@Nonnull @JsonProperty("roleId") RoleId roleId,
@Nonnull @JsonProperty("roleType") RoleType roleType,
@Nonnull @JsonProperty("parentRoles") Set<RoleId> parentRoles,
@Nonnull @JsonProperty("roleCapabilities") Set<Capability> roleCapabilities,
@Nonnull @JsonProperty("label") String label,
@Nonnull @JsonProperty("description") String description) {
this.roleId = Objects.requireNonNull(roleId);
this.roleType = Objects.requireNonNull(roleType);
this.parentRoles = Set.copyOf(Objects.requireNonNull(parentRoles));
this.roleCapabilities = Set.copyOf(Objects.requireNonNull(roleCapabilities));
this.label = Objects.requireNonNull(label);
this.description = Objects.requireNonNull(description);
}

Expand All @@ -33,19 +37,22 @@ public static RoleDefinition get(@JsonProperty("roleId") RoleId roleId,
@JsonProperty("roleType") RoleType roleType,
@JsonProperty("parentRoles") Set<RoleId> parentRoles,
@JsonProperty("roleCapabilities") Set<Capability> roleCapabilities,
@JsonProperty("label") String label,
@JsonProperty("description") String description) {
return new RoleDefinition(roleId, roleType, parentRoles, roleCapabilities, description);
return new RoleDefinition(roleId, roleType, parentRoles, roleCapabilities,
Objects.requireNonNullElse(label, ""),
description);
}


public RoleDefinition withoutCapabilities(Predicate<Capability> filter) {
var remainingCapabilities = roleCapabilities.stream().filter(not(filter)).collect(Collectors.toSet());
return new RoleDefinition(roleId, roleType, parentRoles, remainingCapabilities, description);
return new RoleDefinition(roleId, roleType, parentRoles, remainingCapabilities, label, description);
}

public RoleDefinition addCapabilities(Collection<? extends Capability> capabilities) {
var combinedCapabilities = new LinkedHashSet<>(this.roleCapabilities);
combinedCapabilities.addAll(capabilities);
return new RoleDefinition(roleId, roleType, parentRoles, combinedCapabilities, description);
return new RoleDefinition(roleId, roleType, parentRoles, combinedCapabilities, label, description);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package edu.stanford.protege.webprotege.authorization;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import edu.stanford.protege.webprotege.common.ProjectId;
import edu.stanford.protege.webprotege.common.Request;

import java.util.Objects;

import static edu.stanford.protege.webprotege.authorization.SetProjectRoleAssignmentsRequest.CHANNEL;

@JsonTypeName(CHANNEL)
public record SetProjectRoleAssignmentsRequest(@JsonProperty("projectId") ProjectId projectId,
@JsonProperty("assignments") ProjectRoleAssignments assignments) implements Request<SetProjectRoleAssignmentsResponse> {

public static final String CHANNEL = "webprotege.authorization.SetProjectRoleAssignments";

public SetProjectRoleAssignmentsRequest(@JsonProperty("projectId" ) ProjectId projectId, @JsonProperty("assignments" ) ProjectRoleAssignments assignments) {
this.projectId = Objects.requireNonNull(projectId);
this.assignments = Objects.requireNonNull(assignments);
}

@Override
public String getChannel() {
return CHANNEL;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package edu.stanford.protege.webprotege.authorization;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import edu.stanford.protege.webprotege.common.Response;

import java.util.Objects;

@JsonTypeName(SetProjectRoleAssignmentsRequest.CHANNEL)
public record SetProjectRoleAssignmentsResponse(@JsonProperty("assignments") ProjectRoleAssignments assignments) implements Response {

public SetProjectRoleAssignmentsResponse(@JsonProperty("assignments" ) ProjectRoleAssignments assignments) {
this.assignments = Objects.requireNonNull(assignments);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@

import static com.fasterxml.jackson.annotation.JsonTypeInfo.*;

@JsonTypeInfo(use = Id.NAME)
@JsonTypeName(SetProjectRoleDefinitionsRequest.CHANNEL)
public record SetProjectRoleDefinitionsRequest(@JsonProperty("projectId") ProjectId projectId,
@JsonProperty("roleDefinitions") List<RoleDefinition> roleDefinitions) implements Request<SetProjectRoleDefinitionsResponse> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@

import static com.fasterxml.jackson.annotation.JsonTypeInfo.*;

@JsonTypeInfo(use = Id.NAME)
@JsonTypeName(SetProjectRoleDefinitionsRequest.CHANNEL)
public record SetProjectRoleDefinitionsResponse(List<RoleDefinition> roleDefinitions) implements Response {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package edu.stanford.protege.webprotege.authorization;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import edu.stanford.protege.webprotege.common.UserId;

import java.util.Objects;

public record UserRoleAssignment(@JsonProperty("userId") UserId userId,
@JsonProperty("roleId") RoleId roleId) {

@JsonCreator
public UserRoleAssignment(@JsonProperty("userId" ) UserId userId, @JsonProperty("roleId" ) RoleId roleId) {
this.userId = Objects.requireNonNull(userId);
this.roleId = Objects.requireNonNull(roleId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ void shouldSerialize() throws IOException {
RoleType.PROJECT_ROLE,
Set.of(RoleId.valueOf("parent-role")),
Set.of(BasicCapability.valueOf("ViewProject")),
"Test label",
"Test role description"
)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ void shouldSerialize() throws IOException {
RoleType.PROJECT_ROLE,
Set.of(RoleId.valueOf("parent-role")),
Set.of(BasicCapability.valueOf("ViewProject")),
"Test label",
"Test role description"
)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,9 @@ void shouldSerialize() throws IOException {
var roleId = RoleId.valueOf("test-role");
var parentRoles = Set.of(RoleId.valueOf("parent-role"));
var capabilities = Set.<Capability>of(BasicCapability.valueOf("ViewProject"));
var label = "Test label";
var description = "Test role description";
var roleDefinition = new RoleDefinition(roleId, RoleType.PROJECT_ROLE, parentRoles, capabilities, description);
var roleDefinition = new RoleDefinition(roleId, RoleType.PROJECT_ROLE, parentRoles, capabilities, label, description);

var jsonContent = tester.write(roleDefinition);

Expand All @@ -35,6 +36,7 @@ void shouldSerialize() throws IOException {
assertThat(jsonContent).extractingJsonPathArrayValue("$.parentRoles").containsExactly("parent-role");
assertThat(jsonContent).extractingJsonPathStringValue("$.roleCapabilities[0].id").isEqualTo("ViewProject");
assertThat(jsonContent).extractingJsonPathStringValue("$.roleCapabilities[0].@type").isEqualTo("BasicCapability");
assertThat(jsonContent).extractingJsonPathStringValue("$.label").isEqualTo(label);
assertThat(jsonContent).extractingJsonPathStringValue("$.description").isEqualTo(description);
}

Expand All @@ -51,6 +53,7 @@ void shouldDeserialize() throws IOException {
"id": "ViewProject"
}
],
"label": "Test label",
"description": "Test role description"
}
""";
Expand All @@ -60,6 +63,7 @@ void shouldDeserialize() throws IOException {
assertThat(deserialized.roleId()).isEqualTo(RoleId.valueOf("test-role"));
assertThat(deserialized.parentRoles()).containsExactly(RoleId.valueOf("parent-role"));
assertThat(deserialized.roleCapabilities()).containsExactly(BasicCapability.valueOf("ViewProject"));
assertThat(deserialized.label()).isEqualTo("Test label");
assertThat(deserialized.description()).isEqualTo("Test role description");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ void shouldSerialize() throws IOException {
RoleType.PROJECT_ROLE,
Set.of(RoleId.valueOf("ParentRole")),
Set.of(BasicCapability.valueOf("EditOntology")),
"Test label",
"Test Description"
);
var request = SetDefaultRoleDefinitionsRequest.get(List.of(roleDefinition));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ void shouldSerialize() throws IOException {
RoleType.PROJECT_ROLE,
Set.of(RoleId.valueOf("ParentRole")),
Set.of(BasicCapability.valueOf("EditOntology")),
"Test label",
"Test Description"
);
var response = SetDefaultRoleDefinitionsResponse.get(List.of(roleDefinition));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,14 @@ void shouldSerialize() throws IOException {
RoleType.PROJECT_ROLE,
Set.of(RoleId.valueOf("parent-role")),
Set.of(BasicCapability.valueOf("ViewProject")),
"Test label",
"Test role description"
)
);
var request = SetProjectRoleDefinitionsRequest.get(projectId, roleDefinitions);

var jsonContent = tester.write(request);

assertThat(jsonContent).extractingJsonPathStringValue("$.@type").isEqualTo("webprotege.authorization.SetProjectRoleDefinitions");
assertThat(jsonContent).extractingJsonPathStringValue("$.projectId").isEqualTo("12345678-1234-5678-1234-567812345678");
assertThat(jsonContent).extractingJsonPathArrayValue("$.roleDefinitions").hasSize(1);
}
Expand All @@ -47,7 +47,6 @@ void shouldSerialize() throws IOException {
void shouldDeserialize() throws IOException {
var jsonContent = """
{
"@type": "webprotege.authorization.SetProjectRoleDefinitions",
"projectId": "12345678-1234-5678-1234-567812345678",
"roleDefinitions": [
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,22 +29,21 @@ void shouldSerialize() throws IOException {
RoleType.PROJECT_ROLE,
Set.of(RoleId.valueOf("parent-role")),
Set.of(BasicCapability.valueOf("ViewProject")),
"Test label",
"Test role description"
)
);
var response = SetProjectRoleDefinitionsResponse.get(roleDefinitions);

var jsonContent = tester.write(response);

assertThat(jsonContent).extractingJsonPathStringValue("$.@type").isEqualTo("webprotege.authorization.SetProjectRoleDefinitions");
assertThat(jsonContent).extractingJsonPathArrayValue("$.roleDefinitions").hasSize(1);
}

@Test
void shouldDeserialize() throws IOException {
var jsonContent = """
{
"@type": "webprotege.authorization.SetProjectRoleDefinitions",
"roleDefinitions": [
{
"roleId": "test-role",
Expand Down