Add role attribute to repository permission

This commit is contained in:
René Pfeuffer
2019-05-03 07:59:18 +02:00
parent ad51a6fa27
commit 9109efe2f1
5 changed files with 166 additions and 17 deletions

View File

@@ -0,0 +1,23 @@
package sonia.scm.api.v2.resources;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Target({TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = EitherRoleOrVerbsValidator.class)
@Documented
public @interface EitherRoleOrVerbs {
String message() default "permission must either have a role or a not empty set of verbs";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}

View File

@@ -0,0 +1,30 @@
package sonia.scm.api.v2.resources;
import com.google.common.base.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class EitherRoleOrVerbsValidator implements ConstraintValidator<EitherRoleOrVerbs, RepositoryPermissionDto> {
private static final Logger LOG = LoggerFactory.getLogger(EitherRoleOrVerbsValidator.class);
@Override
public void initialize(EitherRoleOrVerbs constraintAnnotation) {
}
@Override
public boolean isValid(RepositoryPermissionDto object, ConstraintValidatorContext constraintContext) {
if (Strings.isNullOrEmpty(object.getRole())) {
boolean result = object.getVerbs() != null && !object.getVerbs().isEmpty();
LOG.trace("Validation result for permission with empty or no role: {}", result);
return result;
} else {
boolean result = object.getVerbs() == null || object.getVerbs().isEmpty();
LOG.trace("Validation result for permission with non empty role: {}", result);
return result;
}
}
}

View File

@@ -14,6 +14,7 @@ import javax.validation.constraints.Pattern;
import java.util.Collection;
@Getter @Setter @ToString @NoArgsConstructor
@EitherRoleOrVerbs
public class RepositoryPermissionDto extends HalRepresentation {
public static final String GROUP_PREFIX = "@";
@@ -21,9 +22,11 @@ public class RepositoryPermissionDto extends HalRepresentation {
@Pattern(regexp = ValidationUtil.REGEX_NAME)
private String name;
@NotEmpty
@NoBlankStrings
private Collection<String> verbs;
private String role;
private boolean groupPermission = false;
public RepositoryPermissionDto(String permissionName, boolean groupPermission) {