fix repository permission error

This commit is contained in:
Eduard Heimbuch
2020-12-01 16:40:29 +01:00
parent f68370cfd4
commit e7b7bf5b0f
4 changed files with 16 additions and 4 deletions

View File

@@ -48,7 +48,7 @@ public final class AuthorizationChangedEvent {
* @return {@code true} if every user is affected
*/
public boolean isEveryUserAffected(){
return nameOfAffectedUser != null;
return nameOfAffectedUser == null;
}
/**

View File

@@ -36,6 +36,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.shiro.SecurityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.HandlerEventType;
@@ -46,6 +47,7 @@ import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryHandler;
import sonia.scm.repository.RepositoryImportEvent;
import sonia.scm.repository.RepositoryManager;
import sonia.scm.repository.RepositoryPermission;
import sonia.scm.repository.RepositoryPermissions;
import sonia.scm.repository.RepositoryType;
import sonia.scm.repository.api.Command;
@@ -69,6 +71,7 @@ import java.util.function.Consumer;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static java.util.Collections.singletonList;
public class RepositoryImportResource {
@@ -215,6 +218,8 @@ public class RepositoryImportResource {
logger.info("start {} import for external url {}", type, request.getImportUrl());
Repository repository = new Repository(null, type, request.getNamespace(), request.getName());
repository.setPermissions(singletonList(new RepositoryPermission(SecurityUtils.getSubject().getPrincipal().toString(), "OWNER", false)));
try {
repository = manager.create(
repository,

View File

@@ -41,6 +41,8 @@ import sonia.scm.NotFoundException;
import sonia.scm.SCMContextProvider;
import sonia.scm.Type;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.event.ScmEventBus;
import sonia.scm.security.AuthorizationChangedEvent;
import sonia.scm.security.KeyGenerator;
import sonia.scm.util.AssertUtil;
import sonia.scm.util.CollectionAppender;
@@ -147,13 +149,14 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager {
if (initRepository) {
try {
getHandler(newRepository).create(newRepository);
invalidateRepositoryPermissions();
afterCreation.accept(newRepository);
//TODO check if this is okay
} catch (Exception e) {
delete(repository);
throw e;
}
} else {
invalidateRepositoryPermissions();
afterCreation.accept(newRepository);
}
fireEvent(HandlerEventType.CREATE, newRepository);
@@ -166,6 +169,10 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager {
);
}
private void invalidateRepositoryPermissions() {
ScmEventBus.getInstance().post(AuthorizationChangedEvent.createForEveryUser());
}
@Override
public void delete(Repository repository) {
logger.info("delete repository {}/{} of type {}", repository.getNamespace(), repository.getName(), repository.getType());

View File

@@ -298,9 +298,9 @@ public class DefaultAuthorizationCollector implements AuthorizationCollector
@Subscribe(async = false)
public void invalidateCache(AuthorizationChangedEvent event) {
if (event.isEveryUserAffected()) {
invalidateUserCache(event.getNameOfAffectedUser());
} else {
invalidateCache();
} else {
invalidateUserCache(event.getNameOfAffectedUser());
}
}