@pnp/cli-microsoft365
Version:
Manage Microsoft 365 and SharePoint Framework projects on any platform
95 lines • 3.96 kB
JavaScript
import { z } from 'zod';
import { globalOptionsZod } from '../../../../Command.js';
import GraphCommand from '../../../base/GraphCommand.js';
import commands from '../../commands.js';
import { validation } from '../../../../utils/validation.js';
import { entraUser } from '../../../../utils/entraUser.js';
import { entraGroup } from '../../../../utils/entraGroup.js';
import { odata } from '../../../../utils/odata.js';
export const options = z.strictObject({
...globalOptionsZod.shape,
userId: z.uuid().optional(),
userName: z.string().refine(upn => validation.isValidUserPrincipalName(upn), {
error: e => `'${e.input}' is not a valid user principal name for option 'userName'.`
}).optional(),
groupId: z.uuid().optional(),
groupName: z.string().optional(),
startDateTime: z.string().refine(date => validation.isValidISODateTime(date), {
error: e => `'${e.input}' is not a valid ISO 8601 date time string.`
}).optional().alias('s'),
withPrincipalDetails: z.boolean().default(false)
});
class EntraPimRoleAssignmentListCommand extends GraphCommand {
get name() {
return commands.PIM_ROLE_ASSIGNMENT_LIST;
}
get description() {
return 'Retrieves a list of Entra role assignments for a user or group';
}
get schema() {
return options;
}
getRefinedSchema(schema) {
return schema
.refine(options => {
const specified = [options.userId, options.userName, options.groupId, options.groupName].filter(o => o !== undefined).length;
return specified <= 1;
}, {
message: 'Specify only one of the following options: userId, userName, groupId, groupName',
params: {
customCode: 'optionSet',
options: ['userId', 'userName', 'groupId', 'groupName']
}
});
}
async commandAction(logger, args) {
const queryParameters = [];
const filters = [];
const expands = [];
try {
const principalId = await this.getPrincipalId(logger, args.options);
if (principalId) {
filters.push(`principalId eq '${principalId}'`);
}
if (args.options.startDateTime) {
filters.push(`startDateTime ge ${args.options.startDateTime}`);
}
if (filters.length > 0) {
queryParameters.push(`$filter=${filters.join(' and ')}`);
}
expands.push('roleDefinition($select=displayName)');
if (args.options.withPrincipalDetails) {
expands.push('principal');
}
queryParameters.push(`$expand=${expands.join(',')}`);
const queryString = `?${queryParameters.join('&')}`;
const url = `${this.resource}/v1.0/roleManagement/directory/roleAssignmentScheduleInstances${queryString}`;
const results = await odata.getAllItems(url);
await logger.log(results);
}
catch (err) {
this.handleRejectedODataJsonPromise(err);
}
}
async getPrincipalId(logger, options) {
let principalId = options.userId;
if (options.userName) {
if (this.verbose) {
await logger.logToStderr(`Retrieving user by its name '${options.userName}'`);
}
principalId = await entraUser.getUserIdByUpn(options.userName);
}
else if (options.groupId) {
principalId = options.groupId;
}
else if (options.groupName) {
if (this.verbose) {
await logger.logToStderr(`Retrieving group by its name '${options.groupName}'`);
}
principalId = await entraGroup.getGroupIdByDisplayName(options.groupName);
}
return principalId;
}
}
export default new EntraPimRoleAssignmentListCommand();
//# sourceMappingURL=pim-role-assignment-list.js.map