95 lines
2.5 KiB
TypeScript
95 lines
2.5 KiB
TypeScript
import { TeamId } from '@/react/portainer/users/teams/types';
|
|
import { UserId } from '@/portainer/users/types';
|
|
|
|
import {
|
|
AccessControlFormData,
|
|
OwnershipParameters,
|
|
ResourceControlOwnership,
|
|
ResourceId,
|
|
} from './types';
|
|
import { ResourceControlViewModel } from './models/ResourceControlViewModel';
|
|
|
|
/**
|
|
* Transform AccessControlFormData to ResourceControlOwnershipParameters
|
|
* @param {int} userId ID of user performing the operation
|
|
* @param {AccessControlFormData} formValues Form data (generated by AccessControlForm)
|
|
* @param {int[]} subResources Sub Resources restricted by the ResourceControl
|
|
*/
|
|
export function parseOwnershipParameters(
|
|
formValues: AccessControlFormData,
|
|
subResourcesIds: ResourceId[] = []
|
|
): OwnershipParameters {
|
|
const { ownership, authorizedTeams, authorizedUsers } = formValues;
|
|
|
|
const adminOnly = ownership === ResourceControlOwnership.ADMINISTRATORS;
|
|
const publicOnly = ownership === ResourceControlOwnership.PUBLIC;
|
|
|
|
let users = authorizedUsers;
|
|
let teams = authorizedTeams;
|
|
if (
|
|
[
|
|
ResourceControlOwnership.ADMINISTRATORS,
|
|
ResourceControlOwnership.PUBLIC,
|
|
].includes(ownership)
|
|
) {
|
|
users = [];
|
|
teams = [];
|
|
}
|
|
|
|
return {
|
|
administratorsOnly: adminOnly,
|
|
public: publicOnly,
|
|
users,
|
|
teams,
|
|
subResourcesIds,
|
|
};
|
|
}
|
|
|
|
export function defaultValues(
|
|
isAdmin: boolean,
|
|
currentUserId: UserId
|
|
): AccessControlFormData {
|
|
if (!isAdmin) {
|
|
return {
|
|
ownership: ResourceControlOwnership.PRIVATE,
|
|
authorizedTeams: [],
|
|
authorizedUsers: [currentUserId],
|
|
};
|
|
}
|
|
|
|
return {
|
|
ownership: ResourceControlOwnership.ADMINISTRATORS,
|
|
authorizedTeams: [],
|
|
authorizedUsers: [],
|
|
};
|
|
}
|
|
|
|
export function parseAccessControlFormData(
|
|
isAdmin: boolean,
|
|
currentUserId: UserId,
|
|
resourceControl?: ResourceControlViewModel
|
|
): AccessControlFormData {
|
|
if (!resourceControl) {
|
|
return defaultValues(isAdmin, currentUserId);
|
|
}
|
|
|
|
let ownership = resourceControl.Ownership;
|
|
if (isAdmin && ownership === ResourceControlOwnership.PRIVATE) {
|
|
ownership = ResourceControlOwnership.RESTRICTED;
|
|
}
|
|
|
|
let authorizedTeams: TeamId[] = [];
|
|
let authorizedUsers: UserId[] = [];
|
|
if (
|
|
[
|
|
ResourceControlOwnership.PRIVATE,
|
|
ResourceControlOwnership.RESTRICTED,
|
|
].includes(ownership)
|
|
) {
|
|
authorizedTeams = resourceControl.TeamAccesses.map((ra) => ra.TeamId);
|
|
authorizedUsers = resourceControl.UserAccesses.map((ra) => ra.UserId);
|
|
}
|
|
|
|
return { ownership, authorizedUsers, authorizedTeams };
|
|
}
|