user with write permission on namespacesPermissions may also read the namespacePermissions so it is consistent to other permissions

This commit is contained in:
Eduard Heimbuch
2020-09-21 10:39:28 +02:00
parent 39b8fcacde
commit bb4874b8c1
9 changed files with 15 additions and 14 deletions

View File

@@ -617,9 +617,9 @@ export function getDeleteRepoFailure(state: object, namespace: string, name: str
export function getPermissionsLink(state: object, namespaceName: string, repoName?: string) { export function getPermissionsLink(state: object, namespaceName: string, repoName?: string) {
if (repoName) { if (repoName) {
const repo = getRepository(state, namespaceName, repoName); const repo = getRepository(state, namespaceName, repoName);
return repo && repo._links ? repo._links.permissions.href : undefined; return repo?._links ? repo._links.permissions.href : undefined;
} else { } else {
const namespace = getNamespace(state, namespaceName); const namespace = getNamespace(state, namespaceName);
return namespace && namespace._links ? namespace._links.permissions.href : undefined; return namespace?._links ? namespace?._links?.permissions?.href : undefined;
} }
} }

View File

@@ -33,7 +33,7 @@ type Props = WithTranslation & {
class PermissionsNavLink extends React.Component<Props> { class PermissionsNavLink extends React.Component<Props> {
hasPermissionsLink = () => { hasPermissionsLink = () => {
return this.props.namespace._links.permissions; return this.props.namespace?._links?.permissions;
}; };
render() { render() {
if (!this.hasPermissionsLink()) { if (!this.hasPermissionsLink()) {

View File

@@ -47,7 +47,7 @@ class NamespaceToNamespaceDtoMapper {
.self(links.namespace().self(namespace)) .self(links.namespace().self(namespace))
.single(link("repositories", links.repositoryCollection().forNamespace(namespace))); .single(link("repositories", links.repositoryCollection().forNamespace(namespace)));
if (NamespacePermissions.permissionRead().isPermitted()) { if (NamespacePermissions.permissionRead().isPermitted() || NamespacePermissions.permissionWrite().isPermitted()) {
linkingTo linkingTo
.single(link("permissions", links.namespacePermission().all(namespace))); .single(link("permissions", links.namespacePermission().all(namespace)));
} }

View File

@@ -78,7 +78,9 @@ public class RepositoryPermissionCollectionToDtoMapper {
} }
private Links createLinks(Namespace namespace) { private Links createLinks(Namespace namespace) {
if (!NamespacePermissions.permissionWrite().isPermitted()) {
NamespacePermissions.permissionRead().check(); NamespacePermissions.permissionRead().check();
}
Links.Builder linksBuilder = linkingTo() Links.Builder linksBuilder = linkingTo()
.with(Links.linkingTo().self(resourceLinks.namespacePermission().all(namespace.getNamespace())).build()); .with(Links.linkingTo().self(resourceLinks.namespacePermission().all(namespace.getNamespace())).build());
if (NamespacePermissions.permissionWrite().isPermitted()) { if (NamespacePermissions.permissionWrite().isPermitted()) {

View File

@@ -26,15 +26,14 @@ package sonia.scm.api.v2.resources;
import de.otto.edison.hal.Links; import de.otto.edison.hal.Links;
import org.mapstruct.AfterMapping; import org.mapstruct.AfterMapping;
import org.mapstruct.BeforeMapping;
import org.mapstruct.Context; import org.mapstruct.Context;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget; import org.mapstruct.MappingTarget;
import sonia.scm.repository.Namespace; import sonia.scm.repository.Namespace;
import sonia.scm.repository.NamespacePermissions; import sonia.scm.repository.NamespacePermissions;
import sonia.scm.repository.RepositoryPermission;
import sonia.scm.repository.Repository; import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryPermission;
import sonia.scm.repository.RepositoryPermissions; import sonia.scm.repository.RepositoryPermissions;
import javax.inject.Inject; import javax.inject.Inject;

View File

@@ -104,7 +104,7 @@ public class DefaultNamespaceManager implements NamespaceManager {
} }
private Namespace createNamespaceForName(String namespace) { private Namespace createNamespaceForName(String namespace) {
if (NamespacePermissions.permissionRead().isPermitted()) { if (NamespacePermissions.permissionRead().isPermitted() || NamespacePermissions.permissionWrite().isPermitted()) {
return dao.get(namespace) return dao.get(namespace)
.map(Namespace::clone) .map(Namespace::clone)
.orElse(new Namespace(namespace)); .orElse(new Namespace(namespace));

View File

@@ -100,7 +100,7 @@
}, },
"permissionWrite": { "permissionWrite": {
"displayName": "Berechtigungen auf Namespaces modifizieren", "displayName": "Berechtigungen auf Namespaces modifizieren",
"description": "Darf die Berechtigungen auf Namespace-Ebene bearbeiten" "description": "Darf die Berechtigungen auf Namespace-Ebene lesen und bearbeiten"
} }
}, },
"unknown": "Unbekannte Berechtigung" "unknown": "Unbekannte Berechtigung"

View File

@@ -100,7 +100,7 @@
}, },
"permissionWrite": { "permissionWrite": {
"displayName": "Modify permissions on namespaces", "displayName": "Modify permissions on namespaces",
"description": "May modify the permissions set for namespaces" "description": "May read and modify the permissions set for namespaces"
} }
}, },
"unknown": "Unknown permission" "unknown": "Unknown permission"

View File

@@ -11719,10 +11719,10 @@ mini-create-react-context@^0.4.0:
"@babel/runtime" "^7.5.5" "@babel/runtime" "^7.5.5"
tiny-warning "^1.0.3" tiny-warning "^1.0.3"
mini-css-extract-plugin@^0.10.0: mini-css-extract-plugin@^0.11.0:
version "0.10.1" version "0.11.2"
resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.10.1.tgz#2592c891f965e15750da6a6c0b60740b5b0cb62d" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.2.tgz#e3af4d5e04fbcaaf11838ab230510073060b37bf"
integrity sha512-9B10gZixtNjHerADBrMxPXM5G0uL0CRGMcLRV67I8nd1SKbwJrI0okKUzD+PxKsUZ9Dxt8/hPvtzF0DrRnrOyA== integrity sha512-h2LknfX4U1kScXxH8xE9LCOqT5B+068EAj36qicMb8l4dqdJoyHcmWmpd+ueyZfgu/POvIn+teoUnTtei2ikug==
dependencies: dependencies:
loader-utils "^1.1.0" loader-utils "^1.1.0"
normalize-url "1.9.1" normalize-url "1.9.1"