mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-16 18:26:16 +01:00
user with write permission on namespacesPermissions may also read the namespacePermissions so it is consistent to other permissions
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()) {
|
||||||
|
|||||||
@@ -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)));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,7 +78,9 @@ public class RepositoryPermissionCollectionToDtoMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Links createLinks(Namespace namespace) {
|
private Links createLinks(Namespace namespace) {
|
||||||
NamespacePermissions.permissionRead().check();
|
if (!NamespacePermissions.permissionWrite().isPermitted()) {
|
||||||
|
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()) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user