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) {
if (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 {
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> {
hasPermissionsLink = () => {
return this.props.namespace._links.permissions;
return this.props.namespace?._links?.permissions;
};
render() {
if (!this.hasPermissionsLink()) {

View File

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

View File

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

View File

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

View File

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

View File

@@ -100,7 +100,7 @@
},
"permissionWrite": {
"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"

View File

@@ -100,7 +100,7 @@
},
"permissionWrite": {
"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"

View File

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