Remove permissions from repository

This commit is contained in:
René Pfeuffer
2019-01-22 13:00:02 +01:00
parent decc6d29d8
commit 4dcbcb80e7
15 changed files with 103 additions and 131 deletions

View File

@@ -100,7 +100,8 @@ public class RepositoryCollectionResource {
private Repository createModelObjectFromDto(@Valid RepositoryDto repositoryDto) {
Repository repository = dtoToRepositoryMapper.map(repositoryDto, null);
repository.setPermissions(singletonList(new RepositoryPermission(currentUser(), PermissionType.OWNER)));
// TODO RP
// repository.setPermissions(singletonList(new RepositoryPermission(currentUser(), PermissionType.OWNER)));
return repository;
}

View File

@@ -10,7 +10,6 @@ public abstract class RepositoryDtoToRepositoryMapper extends BaseDtoMapper {
@Mapping(target = "id", ignore = true)
@Mapping(target = "publicReadable", ignore = true)
@Mapping(target = "healthCheckFailures", ignore = true)
@Mapping(target = "permissions", ignore = true)
public abstract Repository map(RepositoryDto repositoryDto, @Context String id);
@AfterMapping

View File

@@ -26,11 +26,12 @@ public class RepositoryPermissionCollectionToDtoMapper {
}
public HalRepresentation map(Repository repository) {
List<RepositoryPermissionDto> repositoryPermissionDtoList = repository.getPermissions()
.stream()
.map(permission -> repositoryPermissionToRepositoryPermissionDtoMapper.map(permission, repository))
.collect(toList());
return new HalRepresentation(createLinks(repository), embedDtos(repositoryPermissionDtoList));
// List<RepositoryPermissionDto> repositoryPermissionDtoList = repository.getPermissions()
// .stream()
// .map(permission -> repositoryPermissionToRepositoryPermissionDtoMapper.map(permission, repository))
// .collect(toList());
// return new HalRepresentation(createLinks(repository), embedDtos(repositoryPermissionDtoList));
return new HalRepresentation(createLinks(repository));
}
private Links createLinks(Repository repository) {

View File

@@ -78,7 +78,8 @@ public class RepositoryPermissionRootResource {
Repository repository = load(namespace, name);
RepositoryPermissions.permissionWrite(repository).check();
checkPermissionAlreadyExists(permission, repository);
repository.addPermission(dtoToModelMapper.map(permission));
// TODO RP
// repository.addPermission(dtoToModelMapper.map(permission));
manager.modify(repository);
String urlPermissionName = modelToDtoMapper.getUrlPermissionName(permission);
return Response.created(URI.create(resourceLinks.repositoryPermission().self(namespace, name, urlPermissionName))).build();
@@ -106,12 +107,13 @@ public class RepositoryPermissionRootResource {
Repository repository = load(namespace, name);
RepositoryPermissions.permissionRead(repository).check();
return Response.ok(
repository.getPermissions()
.stream()
.filter(filterPermission(permissionName))
.map(permission -> modelToDtoMapper.map(permission, repository))
.findFirst()
.orElseThrow(() -> notFound(entity(RepositoryPermission.class, namespace).in(Repository.class, namespace + "/" + name)))
// TODO RP
// repository.getPermissions()
// .stream()
// .filter(filterPermission(permissionName))
// .map(permission -> modelToDtoMapper.map(permission, repository))
// .findFirst()
// .orElseThrow(() -> notFound(entity(RepositoryPermission.class, namespace).in(Repository.class, namespace + "/" + name)))
).build();
}
@@ -172,12 +174,14 @@ public class RepositoryPermissionRootResource {
if (!extractedPermissionName.equals(permission.getName())) {
checkPermissionAlreadyExists(permission, repository);
}
RepositoryPermission existingPermission = repository.getPermissions()
.stream()
.filter(filterPermission(permissionName))
.findFirst()
.orElseThrow(() -> notFound(entity(RepositoryPermission.class, namespace).in(Repository.class, namespace + "/" + name)));
dtoToModelMapper.modify(existingPermission, permission);
// TODO RP
// RepositoryPermission existingPermission = repository.getPermissions()
// .stream()
// .filter(filterPermission(permissionName))
// .findFirst()
// .orElseThrow(() -> notFound(entity(RepositoryPermission.class, namespace).in(Repository.class, namespace + "/" + name)));
// dtoToModelMapper.modify(existingPermission, permission);
manager.modify(repository);
log.info("the permission with name: {} is updated.", permissionName);
return Response.noContent().build();
@@ -204,12 +208,13 @@ public class RepositoryPermissionRootResource {
log.info("try to delete the permission with name: {}.", permissionName);
Repository repository = load(namespace, name);
RepositoryPermissions.modify(repository).check();
repository.getPermissions()
.stream()
.filter(filterPermission(permissionName))
.findFirst()
.ifPresent(repository::removePermission)
;
// TODO RP
// repository.getPermissions()
// .stream()
// .filter(filterPermission(permissionName))
// .findFirst()
// .ifPresent(repository::removePermission)
// ;
manager.modify(repository);
log.info("the permission with name: {} is updated.", permissionName);
return Response.noContent().build();
@@ -261,9 +266,10 @@ public class RepositoryPermissionRootResource {
}
private boolean isPermissionExist(RepositoryPermissionDto permission, Repository repository) {
return repository.getPermissions()
.stream()
.anyMatch(p -> p.getName().equals(permission.getName()) && p.isGroupPermission() == permission.isGroupPermission());
return true;
// return repository.getPermissions()
// .stream()
// .anyMatch(p -> p.getName().equals(permission.getName()) && p.isGroupPermission() == permission.isGroupPermission());
}
}

View File

@@ -154,7 +154,6 @@ public class RepositoryResource {
private Repository processUpdate(RepositoryDto repositoryDto, Repository existing) {
Repository changedRepository = dtoToRepositoryMapper.map(repositoryDto, existing.getId());
changedRepository.setPermissions(existing.getPermissions());
return changedRepository;
}

View File

@@ -167,7 +167,9 @@ public class AuthorizationChangedEventProducer {
private boolean isAuthorizationDataModified(Repository repository, Repository beforeModification) {
return repository.isArchived() != beforeModification.isArchived()
|| repository.isPublicReadable() != beforeModification.isPublicReadable()
|| !(repository.getPermissions().containsAll(beforeModification.getPermissions()) && beforeModification.getPermissions().containsAll(repository.getPermissions()));
// TODO RP
// || !(repository.getPermissions().containsAll(beforeModification.getPermissions()) && beforeModification.getPermissions().containsAll(repository.getPermissions()))
;
}
private void fireEventForEveryUser() {

View File

@@ -63,6 +63,7 @@ import sonia.scm.user.UserPermissions;
import sonia.scm.util.Util;
import java.util.Collection;
import java.util.Collections;
import java.util.Set;
//~--- JDK imports ------------------------------------------------------------
@@ -198,8 +199,12 @@ public class DefaultAuthorizationCollector implements AuthorizationCollector
private void collectRepositoryPermissions(Builder<String> builder,
Repository repository, User user, GroupNames groups)
{
// TODO RP
Collection<RepositoryPermission> repositoryPermissions
= repository.getPermissions();
= Collections.emptyList();
// = repository.getPermissions();
if (Util.isNotEmpty(repositoryPermissions))
{

View File

@@ -0,0 +1,6 @@
package sonia.scm.security;
public class RepositoryPermissionAssigner {
}