Cleanup permissions for namespace when it is removed

This commit is contained in:
René Pfeuffer
2020-09-17 16:02:42 +02:00
parent a24abe245b
commit 4bf6e17377
3 changed files with 49 additions and 2 deletions

View File

@@ -25,8 +25,8 @@
package sonia.scm.repository;
import com.github.legman.EventBus;
import com.github.legman.Subscribe;
import sonia.scm.HandlerEventType;
import sonia.scm.event.ScmEventBus;
import javax.inject.Inject;
import java.util.Collection;
@@ -80,6 +80,26 @@ public class DefaultNamespaceManager implements NamespaceManager {
fireEvent(HandlerEventType.MODIFY, namespace, oldNamespace);
}
@Subscribe
public void cleanupDeletedNamespaces(RepositoryEvent repositoryEvent) {
HandlerEventType eventType = repositoryEvent.getEventType();
if (eventType == HandlerEventType.DELETE || eventType == HandlerEventType.MODIFY && !repositoryEvent.getItem().getNamespace().equals(repositoryEvent.getOldItem().getNamespace())) {
Collection<String> allNamespaces = repositoryManager.getAllNamespaces();
String oldNamespace = getOldNamespace(repositoryEvent);
if (!allNamespaces.contains(oldNamespace)) {
dao.delete(oldNamespace);
}
}
}
public String getOldNamespace(RepositoryEvent repositoryEvent) {
if (repositoryEvent.getEventType() == HandlerEventType.DELETE) {
return repositoryEvent.getItem().getNamespace();
} else {
return repositoryEvent.getOldItem().getNamespace();
}
}
private Namespace createNamespaceForName(String namespace) {
return dao.get(namespace)
.map(Namespace::clone)