项目文件夹

文件
2026-07-13 12:08:39 +08:00

96 行
3.1 KiB
JavaScript

import _ from 'lodash-es';
import angular from 'angular';
import { ResourceControlOwnership as RCO } from '@/react/portainer/access-control/types';
import { ResourceControlOwnershipParameters } from '../models/resourceControl/resourceControlOwnershipParameters';
class ResourceControlHelper {
/**
* Transform ResourceControlViewModel to ResourceControlOwnershipParameters
* @param {int} userId ID of User performing the action
* @param {ResourceControlViewModel} resourceControl ResourceControl view model
*/
RCViewModelToOwnershipParameters(userId, resourceControl) {
if (!resourceControl) {
return new ResourceControlOwnershipParameters(true);
}
let adminOnly = false;
let publicOnly = false;
let users = [];
let teams = [];
switch (resourceControl.Ownership) {
case RCO.PUBLIC:
publicOnly = true;
break;
case RCO.PRIVATE:
users = [userId];
break;
case RCO.RESTRICTED:
users = _.map(resourceControl.UserAccesses, (user) => user.UserId);
teams = _.map(resourceControl.TeamAccesses, (team) => team.TeamId);
break;
default:
adminOnly = true;
break;
}
return new ResourceControlOwnershipParameters(adminOnly, publicOnly, users, teams);
}
/**
* 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
*/
RCFormDataToOwnershipParameters(userId, formValues, subResources = []) {
if (!formValues.AccessControlEnabled) {
formValues.Ownership = RCO.PUBLIC;
}
let adminOnly = false;
let publicOnly = false;
let users = [];
let teams = [];
switch (formValues.Ownership) {
case RCO.PUBLIC:
publicOnly = true;
break;
case RCO.PRIVATE:
users.push(userId);
break;
case RCO.RESTRICTED:
users = _.map(formValues.AuthorizedUsers, (user) => user.Id);
teams = _.map(formValues.AuthorizedTeams, (team) => team.Id);
break;
default:
adminOnly = true;
break;
}
return new ResourceControlOwnershipParameters(adminOnly, publicOnly, users, teams, subResources);
}
retrieveAuthorizedUsers(resourceControl, users) {
const authorizedUsers = [];
_.forEach(resourceControl.UserAccesses, (access) => {
const user = _.find(users, { Id: access.UserId });
if (user) {
authorizedUsers.push(user);
}
});
return authorizedUsers;
}
retrieveAuthorizedTeams(resourceControl, teams) {
const authorizedTeams = [];
_.forEach(resourceControl.TeamAccesses, (access) => {
const team = _.find(teams, { Id: access.TeamId });
if (team) {
authorizedTeams.push(team);
}
});
return authorizedTeams;
}
}
export default ResourceControlHelper;
angular.module('portainer.app').service('ResourceControlHelper', ResourceControlHelper);