portainer/app/react/portainer/access-control/models/ResourceControlViewModel.ts

61 lines
1.3 KiB
TypeScript

import {
ResourceControlId,
ResourceControlOwnership,
ResourceControlResponse,
ResourceControlType,
ResourceId,
TeamResourceAccess,
UserResourceAccess,
} from '../types';
export class ResourceControlViewModel {
Id: ResourceControlId;
Type: ResourceControlType;
ResourceId: ResourceId;
UserAccesses: UserResourceAccess[];
TeamAccesses: TeamResourceAccess[];
Public: boolean;
System: boolean;
Ownership: ResourceControlOwnership;
constructor(data: ResourceControlResponse) {
this.Id = data.Id;
this.Type = data.Type;
this.ResourceId = data.ResourceId;
this.UserAccesses = data.UserAccesses;
this.TeamAccesses = data.TeamAccesses;
this.Public = data.Public;
this.System = data.System;
this.Ownership = determineOwnership(data);
}
}
export function determineOwnership(resourceControl: ResourceControlResponse) {
if (resourceControl.Public) {
return ResourceControlOwnership.PUBLIC;
}
if (
resourceControl.UserAccesses.length === 1 &&
resourceControl.TeamAccesses.length === 0
) {
return ResourceControlOwnership.PRIVATE;
}
if (
resourceControl.UserAccesses.length > 1 ||
resourceControl.TeamAccesses.length > 0
) {
return ResourceControlOwnership.RESTRICTED;
}
return ResourceControlOwnership.ADMINISTRATORS;
}