mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-02 19:45:51 +01:00
Heed peer review remarks
This commit is contained in:
@@ -27,6 +27,13 @@ package sonia.scm.repository;
|
||||
import java.util.Collection;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* Manages namespaces. Mind that namespaces do not have a lifecycle on their own, but only do exist through
|
||||
* repositories. Therefore you cannot create or delete namespaces, but just change related settings like permissions
|
||||
* associated with them.
|
||||
*
|
||||
* @since 2.6.0
|
||||
*/
|
||||
public interface NamespaceManager {
|
||||
|
||||
/**
|
||||
|
||||
@@ -119,11 +119,16 @@ public class RepositoryPermission implements PermissionObject, Serializable
|
||||
final RepositoryPermission other = (RepositoryPermission) obj;
|
||||
|
||||
return Objects.equal(name, other.name)
|
||||
&& (verbs == null && other.verbs == null || verbs != null && other.verbs != null && CollectionUtils.isEqualCollection(verbs, other.verbs))
|
||||
&& equalVerbs(other)
|
||||
&& Objects.equal(role, other.role)
|
||||
&& Objects.equal(groupPermission, other.groupPermission);
|
||||
}
|
||||
|
||||
public boolean equalVerbs(RepositoryPermission other) {
|
||||
return verbs == null && other.verbs == null
|
||||
|| verbs != null && other.verbs != null && CollectionUtils.isEqualCollection(verbs, other.verbs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the hash code value for the {@link RepositoryPermission}.
|
||||
*
|
||||
|
||||
@@ -58,6 +58,6 @@ export type NamespaceCollection = {
|
||||
|
||||
export type RepositoryGroup = {
|
||||
name: string;
|
||||
namespace: Namespace;
|
||||
namespace?: Namespace;
|
||||
repositories: Repository[];
|
||||
};
|
||||
|
||||
@@ -5,5 +5,10 @@
|
||||
"settingsNavLink": "Einstellungen",
|
||||
"permissionsNavLink": "Berechtigungen"
|
||||
}
|
||||
},
|
||||
"repositoryOverview": {
|
||||
"settings": {
|
||||
"tooltip": "Einstellungen für den Namespace"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,5 +5,10 @@
|
||||
"settingsNavLink": "Settings",
|
||||
"permissionsNavLink": "Permissions"
|
||||
}
|
||||
},
|
||||
"repositoryOverview": {
|
||||
"settings": {
|
||||
"tooltip": "Namespace related settings"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,17 +26,18 @@ import { Link } from "react-router-dom";
|
||||
import { CardColumnGroup, RepositoryEntry } from "@scm-manager/ui-components";
|
||||
import { RepositoryGroup } from "@scm-manager/ui-types";
|
||||
import { Icon } from "@scm-manager/ui-components";
|
||||
import { WithTranslation, withTranslation } from "react-i18next";
|
||||
|
||||
type Props = {
|
||||
type Props = WithTranslation & {
|
||||
group: RepositoryGroup;
|
||||
};
|
||||
|
||||
class RepositoryGroupEntry extends React.Component<Props> {
|
||||
render() {
|
||||
const { group } = this.props;
|
||||
const { group, t } = this.props;
|
||||
const settingsLink = group.namespace?._links?.permissions && (
|
||||
<Link to={`/namespace/${group.name}/settings`}>
|
||||
<Icon color={"is-link"} name={"cog"} />
|
||||
<Icon color={"is-link"} name={"cog"} title={t("repositoryOverview.settings.tooltip")} />
|
||||
</Link>
|
||||
);
|
||||
const namespaceHeader = (
|
||||
@@ -54,4 +55,4 @@ class RepositoryGroupEntry extends React.Component<Props> {
|
||||
}
|
||||
}
|
||||
|
||||
export default RepositoryGroupEntry;
|
||||
export default withTranslation("namespaces")(RepositoryGroupEntry);
|
||||
|
||||
@@ -65,5 +65,5 @@ function sortByName(a, b) {
|
||||
}
|
||||
|
||||
function findNamespace(namespaces: NamespaceCollection, namespaceToFind: string) {
|
||||
return namespaces._embedded.namespaces.filter(namespace => namespace.namespace === namespaceToFind)[0];
|
||||
return namespaces._embedded.namespaces.find(namespace => namespace.namespace === namespaceToFind);
|
||||
}
|
||||
|
||||
@@ -33,7 +33,8 @@ import {
|
||||
CustomQueryFlexWrappedColumns,
|
||||
ErrorPage,
|
||||
Loading,
|
||||
Page, PrimaryContentColumn,
|
||||
Page,
|
||||
PrimaryContentColumn,
|
||||
SecondaryNavigation,
|
||||
SecondaryNavigationColumn,
|
||||
StateMenuContextProvider,
|
||||
@@ -49,6 +50,7 @@ type Props = RouteComponentProps &
|
||||
namespaceName: string;
|
||||
namespacesLink: string;
|
||||
namespace: Namespace;
|
||||
error: Error;
|
||||
|
||||
// dispatch functions
|
||||
fetchNamespace: (link: string, namespace: string) => void;
|
||||
|
||||
@@ -60,10 +60,10 @@ import static sonia.scm.api.v2.resources.RepositoryPermissionDto.GROUP_PREFIX;
|
||||
@Slf4j
|
||||
public class NamespacePermissionResource {
|
||||
|
||||
private RepositoryPermissionDtoToRepositoryPermissionMapper dtoToModelMapper;
|
||||
private RepositoryPermissionToRepositoryPermissionDtoMapper modelToDtoMapper;
|
||||
private RepositoryPermissionCollectionToDtoMapper repositoryPermissionCollectionToDtoMapper;
|
||||
private ResourceLinks resourceLinks;
|
||||
private final RepositoryPermissionDtoToRepositoryPermissionMapper dtoToModelMapper;
|
||||
private final RepositoryPermissionToRepositoryPermissionDtoMapper modelToDtoMapper;
|
||||
private final RepositoryPermissionCollectionToDtoMapper repositoryPermissionCollectionToDtoMapper;
|
||||
private final ResourceLinks resourceLinks;
|
||||
private final NamespaceManager manager;
|
||||
|
||||
@Inject
|
||||
@@ -234,7 +234,6 @@ public class NamespacePermissionResource {
|
||||
public void update(@PathParam("namespace") String namespaceName,
|
||||
@PathParam("permission-name") String permissionName,
|
||||
@Valid RepositoryPermissionDto permission) {
|
||||
log.info("try to update the permission with name: {}. the modified permission is: {}", permissionName, permission);
|
||||
Namespace namespace = load(namespaceName);
|
||||
String extractedPermissionName = getPermissionName(permissionName);
|
||||
if (!isPermissionExist(new RepositoryPermissionDto(extractedPermissionName, isGroupPermission(permissionName)), namespace)) {
|
||||
@@ -256,7 +255,7 @@ public class NamespacePermissionResource {
|
||||
}
|
||||
namespace.addPermission(newPermission);
|
||||
manager.modify(namespace);
|
||||
log.info("the permission with name: {} is updated.", permissionName);
|
||||
log.info("the permission with name: {} is updated to {}.", permissionName, permission);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -296,7 +295,8 @@ public class NamespacePermissionResource {
|
||||
|
||||
private Predicate<RepositoryPermission> filterPermission(String name) {
|
||||
return permission ->
|
||||
getPermissionName(name).equals(permission.getName()) && permission.isGroupPermission() == isGroupPermission(name);
|
||||
getPermissionName(name).equals(permission.getName())
|
||||
&& permission.isGroupPermission() == isGroupPermission(name);
|
||||
}
|
||||
|
||||
private String getPermissionName(String permissionName) {
|
||||
|
||||
@@ -80,8 +80,7 @@ public class DefaultNamespaceManager implements NamespaceManager {
|
||||
|
||||
@Subscribe
|
||||
public void cleanupDeletedNamespaces(RepositoryEvent repositoryEvent) {
|
||||
HandlerEventType eventType = repositoryEvent.getEventType();
|
||||
if (eventType == HandlerEventType.DELETE || eventType == HandlerEventType.MODIFY && !repositoryEvent.getItem().getNamespace().equals(repositoryEvent.getOldItem().getNamespace())) {
|
||||
if (namespaceRelevantChange(repositoryEvent)) {
|
||||
Collection<String> allNamespaces = repositoryManager.getAllNamespaces();
|
||||
String oldNamespace = getOldNamespace(repositoryEvent);
|
||||
if (!allNamespaces.contains(oldNamespace)) {
|
||||
@@ -90,6 +89,12 @@ public class DefaultNamespaceManager implements NamespaceManager {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean namespaceRelevantChange(RepositoryEvent repositoryEvent) {
|
||||
HandlerEventType eventType = repositoryEvent.getEventType();
|
||||
return eventType == HandlerEventType.DELETE
|
||||
|| eventType == HandlerEventType.MODIFY && !repositoryEvent.getItem().getNamespace().equals(repositoryEvent.getOldItem().getNamespace());
|
||||
}
|
||||
|
||||
public String getOldNamespace(RepositoryEvent repositoryEvent) {
|
||||
if (repositoryEvent.getEventType() == HandlerEventType.DELETE) {
|
||||
return repositoryEvent.getItem().getNamespace();
|
||||
|
||||
@@ -95,11 +95,11 @@
|
||||
},
|
||||
"namespace": {
|
||||
"permissionRead": {
|
||||
"displayName": "read permissions on namespaces",
|
||||
"displayName": "Read permissions on namespaces",
|
||||
"description": "May see the permissions set for namespaces"
|
||||
},
|
||||
"permissionWrite": {
|
||||
"displayName": "modify permissions on namespaces",
|
||||
"displayName": "Modify permissions on namespaces",
|
||||
"description": "May modify the permissions set for namespaces"
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user