mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-13 00:45:44 +01:00
Refactor fetching permissions
This commit is contained in:
@@ -8,7 +8,6 @@ import {
|
|||||||
} from "@scm-manager/ui-components";
|
} from "@scm-manager/ui-components";
|
||||||
import { translate } from "react-i18next";
|
import { translate } from "react-i18next";
|
||||||
import {
|
import {
|
||||||
loadAvailablePermissions,
|
|
||||||
loadPermissionsForEntity,
|
loadPermissionsForEntity,
|
||||||
setPermissions
|
setPermissions
|
||||||
} from "./handlePermissions";
|
} from "./handlePermissions";
|
||||||
@@ -68,35 +67,19 @@ class SetPermissions extends React.Component<Props, State> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
componentDidMount(): void {
|
componentDidMount(): void {
|
||||||
loadAvailablePermissions(this.props.availablePermissionLink).then(
|
loadPermissionsForEntity(
|
||||||
response => {
|
this.props.availablePermissionLink,
|
||||||
const availablePermissions = response.permissions;
|
this.props.selectedPermissionsLink.href
|
||||||
const permissions = {};
|
).then(response => {
|
||||||
availablePermissions.forEach(p => {
|
const { permissions, overwriteLink } = response;
|
||||||
permissions[p] = false;
|
this.setState({
|
||||||
});
|
permissions: permissions,
|
||||||
this.setState({ permissions }, this.loadPermissionsForEntity);
|
loading: false,
|
||||||
}
|
overwritePermissionsLink: overwriteLink
|
||||||
);
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
loadPermissionsForEntity = () => {
|
|
||||||
loadPermissionsForEntity(this.props.selectedPermissionsLink.href).then(
|
|
||||||
response => {
|
|
||||||
const checkedPermissions = response.permissions;
|
|
||||||
this.setState(state => {
|
|
||||||
const newPermissions = state.permissions;
|
|
||||||
checkedPermissions.forEach(name => (newPermissions[name] = true));
|
|
||||||
return {
|
|
||||||
loading: false,
|
|
||||||
permissions: newPermissions,
|
|
||||||
overwritePermissionsLink: response._links.overwrite
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
submit = (event: Event) => {
|
submit = (event: Event) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
if (this.state.permissions) {
|
if (this.state.permissions) {
|
||||||
|
|||||||
@@ -12,14 +12,22 @@ export function setPermissions(url: string, permissions: string[]) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function loadPermissionsForEntity(url: string) {
|
export function loadPermissionsForEntity(
|
||||||
return apiClient.get(url).then(response => {
|
availableUrl: string,
|
||||||
return response.json();
|
userUrl: string
|
||||||
});
|
) {
|
||||||
}
|
return Promise.all([
|
||||||
|
apiClient.get(availableUrl).then(response => {
|
||||||
export function loadAvailablePermissions(url: string) {
|
return response.json();
|
||||||
return apiClient.get(url).then(response => {
|
}),
|
||||||
return response.json();
|
apiClient.get(userUrl).then(response => {
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
]).then(values => {
|
||||||
|
const [availablePermissions, checkedPermissions] = values;
|
||||||
|
const permissions = {};
|
||||||
|
availablePermissions.permissions.forEach(p => (permissions[p] = false));
|
||||||
|
checkedPermissions.permissions.forEach(p => (permissions[p] = true));
|
||||||
|
return { permissions, overwriteLink: checkedPermissions._links.overwrite };
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
67
scm-ui/src/permissions/components/handlePermissions.test.js
Normal file
67
scm-ui/src/permissions/components/handlePermissions.test.js
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
//@flow
|
||||||
|
import fetchMock from "fetch-mock";
|
||||||
|
import { loadPermissionsForEntity } from "./handlePermissions";
|
||||||
|
|
||||||
|
describe("load permissions for entity", () => {
|
||||||
|
const AVAILABLE_PERMISSIONS_URL = "/permissions";
|
||||||
|
const USER_PERMISSIONS_URL = "/user/scmadmin/permissions";
|
||||||
|
|
||||||
|
const availablePermissions = `{
|
||||||
|
"permissions": [
|
||||||
|
"repository:read,pull:*",
|
||||||
|
"repository:read,pull,push:*",
|
||||||
|
"repository:*:*"
|
||||||
|
]
|
||||||
|
}`;
|
||||||
|
const userPermissions = `{
|
||||||
|
"permissions": [
|
||||||
|
"repository:read,pull:*"
|
||||||
|
],
|
||||||
|
"_links": {
|
||||||
|
"self": {
|
||||||
|
"href": "/api/v2/users/rene/permissions"
|
||||||
|
},
|
||||||
|
"overwrite": {
|
||||||
|
"href": "/api/v2/users/rene/permissions"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fetchMock.getOnce(
|
||||||
|
"/api/v2" + AVAILABLE_PERMISSIONS_URL,
|
||||||
|
availablePermissions
|
||||||
|
);
|
||||||
|
fetchMock.getOnce("/api/v2" + USER_PERMISSIONS_URL, userPermissions);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
fetchMock.reset();
|
||||||
|
fetchMock.restore();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return permissions array", done => {
|
||||||
|
loadPermissionsForEntity(
|
||||||
|
AVAILABLE_PERMISSIONS_URL,
|
||||||
|
USER_PERMISSIONS_URL
|
||||||
|
).then(result => {
|
||||||
|
const { permissions } = result;
|
||||||
|
expect(Object.entries(permissions).length).toBe(3);
|
||||||
|
expect(permissions["repository:read,pull:*"]).toBe(true);
|
||||||
|
expect(permissions["repository:read,pull,push:*"]).toBe(false);
|
||||||
|
expect(permissions["repository:*:*"]).toBe(false);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return overwrite link", done => {
|
||||||
|
loadPermissionsForEntity(
|
||||||
|
AVAILABLE_PERMISSIONS_URL,
|
||||||
|
USER_PERMISSIONS_URL
|
||||||
|
).then(result => {
|
||||||
|
const { overwriteLink } = result;
|
||||||
|
expect(overwriteLink.href).toBe("/api/v2/users/rene/permissions");
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user