Change the "manage" plugin permission to "write". This way we don't need a migration because the plugin manage permission was already saved as "plugin:read,write"

This commit is contained in:
Eduard Heimbuch
2020-05-05 10:55:23 +02:00
parent 55c96ee81d
commit 63e5d2f23d
7 changed files with 14 additions and 13 deletions

View File

@@ -47,7 +47,7 @@ import java.io.Serializable;
value = "plugin", value = "plugin",
generatedClass = "PluginPermissions", generatedClass = "PluginPermissions",
permissions = {}, permissions = {},
globalPermissions = {"read", "manage"}, globalPermissions = {"read", "write"},
custom = true, customGlobal = true custom = true, customGlobal = true
) )
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)

View File

@@ -178,7 +178,7 @@ public class AvailablePluginResource {
) )
) )
public Response installPlugin(@PathParam("name") String name, @QueryParam("restart") boolean restartAfterInstallation) { public Response installPlugin(@PathParam("name") String name, @QueryParam("restart") boolean restartAfterInstallation) {
PluginPermissions.manage().check(); PluginPermissions.write().check();
pluginManager.install(name, restartAfterInstallation); pluginManager.install(name, restartAfterInstallation);
return Response.ok().build(); return Response.ok().build();
} }

View File

@@ -82,7 +82,7 @@ public class IndexDtoGenerator extends HalAppenderMapper {
builder.single(link("installedPlugins", resourceLinks.installedPluginCollection().self())); builder.single(link("installedPlugins", resourceLinks.installedPluginCollection().self()));
builder.single(link("availablePlugins", resourceLinks.availablePluginCollection().self())); builder.single(link("availablePlugins", resourceLinks.availablePluginCollection().self()));
} }
if (PluginPermissions.manage().isPermitted()) { if (PluginPermissions.write().isPermitted()) {
builder.single(link("pendingPlugins", resourceLinks.pendingPluginCollection().self())); builder.single(link("pendingPlugins", resourceLinks.pendingPluginCollection().self()));
} }
if (UserPermissions.list().isPermitted()) { if (UserPermissions.list().isPermitted()) {

View File

@@ -118,7 +118,7 @@ public class PendingPluginResource {
List<PluginDto> uninstallDtos = uninstallPlugins.map(i -> mapper.mapInstalled(i, pending)).collect(toList()); List<PluginDto> uninstallDtos = uninstallPlugins.map(i -> mapper.mapInstalled(i, pending)).collect(toList());
if ( if (
PluginPermissions.manage().isPermitted() && PluginPermissions.write().isPermitted() &&
(!installDtos.isEmpty() || !updateDtos.isEmpty() || !uninstallDtos.isEmpty()) (!installDtos.isEmpty() || !updateDtos.isEmpty() || !uninstallDtos.isEmpty())
) { ) {
if (restarter.isSupported()) { if (restarter.isSupported()) {

View File

@@ -31,6 +31,7 @@ import de.otto.edison.hal.Links;
import sonia.scm.plugin.AvailablePlugin; import sonia.scm.plugin.AvailablePlugin;
import sonia.scm.plugin.InstalledPlugin; import sonia.scm.plugin.InstalledPlugin;
import sonia.scm.plugin.PluginManager; import sonia.scm.plugin.PluginManager;
import sonia.scm.plugin.PluginPermissions;
import java.util.List; import java.util.List;
@@ -71,7 +72,7 @@ public class PluginDtoCollectionMapper {
Links.Builder linksBuilder = linkingTo() Links.Builder linksBuilder = linkingTo()
.with(Links.linkingTo().self(baseUrl).build()); .with(Links.linkingTo().self(baseUrl).build());
if (!manager.getUpdatable().isEmpty()) { if (!manager.getUpdatable().isEmpty() && PluginPermissions.write().isPermitted()) {
linksBuilder.single(link("update", resourceLinks.installedPluginCollection().update())); linksBuilder.single(link("update", resourceLinks.installedPluginCollection().update()));
} }

View File

@@ -81,7 +81,7 @@ public abstract class PluginDtoMapper {
.self(resourceLinks.availablePlugin() .self(resourceLinks.availablePlugin()
.self(information.getName())); .self(information.getName()));
if (!plugin.isPending() && PluginPermissions.manage().isPermitted()) { if (!plugin.isPending() && PluginPermissions.write().isPermitted()) {
String href = resourceLinks.availablePlugin().install(information.getName()); String href = resourceLinks.availablePlugin().install(information.getName());
appendLink(links, "install", href); appendLink(links, "install", href);
} }
@@ -106,7 +106,7 @@ public abstract class PluginDtoMapper {
if (!plugin.isCore() if (!plugin.isCore()
&& availablePlugin.isPresent() && availablePlugin.isPresent()
&& !availablePlugin.get().isPending() && !availablePlugin.get().isPending()
&& PluginPermissions.manage().isPermitted() && PluginPermissions.write().isPermitted()
) { ) {
String href = resourceLinks.availablePlugin().install(information.getName()); String href = resourceLinks.availablePlugin().install(information.getName());
appendLink(links, "update", href); appendLink(links, "update", href);
@@ -114,7 +114,7 @@ public abstract class PluginDtoMapper {
if (plugin.isUninstallable() if (plugin.isUninstallable()
&& (!availablePlugin.isPresent() || !availablePlugin.get().isPending()) && (!availablePlugin.isPresent() || !availablePlugin.get().isPending())
&& PluginPermissions.manage().isPermitted() && PluginPermissions.write().isPermitted()
) { ) {
String href = resourceLinks.installedPlugin().uninstall(information.getName()); String href = resourceLinks.installedPlugin().uninstall(information.getName());
appendLink(links, "uninstall", href); appendLink(links, "uninstall", href);

View File

@@ -157,7 +157,7 @@ public class DefaultPluginManager implements PluginManager {
@Override @Override
public void install(String name, boolean restartAfterInstallation) { public void install(String name, boolean restartAfterInstallation) {
PluginPermissions.manage().check(); PluginPermissions.write().check();
getInstalled(name) getInstalled(name)
.map(InstalledPlugin::isCore) .map(InstalledPlugin::isCore)
@@ -192,7 +192,7 @@ public class DefaultPluginManager implements PluginManager {
@Override @Override
public void uninstall(String name, boolean restartAfterInstallation) { public void uninstall(String name, boolean restartAfterInstallation) {
PluginPermissions.manage().check(); PluginPermissions.write().check();
InstalledPlugin installed = getInstalled(name) InstalledPlugin installed = getInstalled(name)
.orElseThrow(() -> NotFoundException.notFound(entity(InstalledPlugin.class, name))); .orElseThrow(() -> NotFoundException.notFound(entity(InstalledPlugin.class, name)));
doThrow().violation("plugin is a core plugin and cannot be uninstalled").when(installed.isCore()); doThrow().violation("plugin is a core plugin and cannot be uninstalled").when(installed.isCore());
@@ -231,7 +231,7 @@ public class DefaultPluginManager implements PluginManager {
@Override @Override
public void executePendingAndRestart() { public void executePendingAndRestart() {
PluginPermissions.manage().check(); PluginPermissions.write().check();
if (!pendingInstallQueue.isEmpty() || getInstalled().stream().anyMatch(InstalledPlugin::isMarkedForUninstall)) { if (!pendingInstallQueue.isEmpty() || getInstalled().stream().anyMatch(InstalledPlugin::isMarkedForUninstall)) {
triggerRestart("execute pending plugin changes"); triggerRestart("execute pending plugin changes");
} }
@@ -278,7 +278,7 @@ public class DefaultPluginManager implements PluginManager {
@Override @Override
public void cancelPending() { public void cancelPending() {
PluginPermissions.manage().check(); PluginPermissions.write().check();
pendingUninstallQueue.forEach(PendingPluginUninstallation::cancel); pendingUninstallQueue.forEach(PendingPluginUninstallation::cancel);
pendingInstallQueue.forEach(PendingPluginInstallation::cancel); pendingInstallQueue.forEach(PendingPluginInstallation::cancel);
pendingUninstallQueue.clear(); pendingUninstallQueue.clear();
@@ -288,7 +288,7 @@ public class DefaultPluginManager implements PluginManager {
@Override @Override
public void updateAll() { public void updateAll() {
PluginPermissions.manage().check(); PluginPermissions.write().check();
for (InstalledPlugin installedPlugin : getInstalled()) { for (InstalledPlugin installedPlugin : getInstalled()) {
String pluginName = installedPlugin.getDescriptor().getInformation().getName(); String pluginName = installedPlugin.getDescriptor().getInformation().getName();
if (isUpdatable(pluginName)) { if (isUpdatable(pluginName)) {