UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

235 lines 10.3 kB
import { IIdentified, IManagedObject, InventoryService, UserService } from '@c8y/client'; import { AppStateService } from './ui-state.service'; import * as i0 from "@angular/core"; export type CanEditConfig = { /** * Skips roles check. */ skipRolesCheck?: boolean; /** * Skips managed object ownership check. */ skipOwnerCheck?: boolean; /** * Skips checks with a query to the inventory API. */ skipRequestCheck?: boolean; }; export declare class Permissions { private appState; private inventory; private user; static ROLE_ADVANCED_SOFTWARE_ADMIN: string; static ROLE_ADVANCED_SOFTWARE_READ: string; static ROLE_ALARM_ADMIN: string; static ROLE_ALARM_READ: string; static ROLE_ANALYTICSBUILDER_READ: string; static ROLE_APPLICATION_MANAGEMENT_ADMIN: string; static ROLE_APPLICATION_MANAGEMENT_READ: string; static ROLE_AUDIT_ADMIN: string; static ROLE_AUDIT_READ: string; static ROLE_BINARY_ADMIN: string; static ROLE_BINARY_CREATE: string; static ROLE_BINARY_READ: string; static ROLE_BULK_OPERATION_ADMIN: string; static ROLE_BULK_OPERATION_READ: string; static ROLE_CEP_MANAGEMENT_ADMIN: string; static ROLE_CEP_MANAGEMENT_READ: string; static ROLE_DATA_BROKER_ADMIN: string; static ROLE_DATA_BROKER_READ: string; static ROLE_DEVICE_CONTROL_ADMIN: string; static ROLE_DEVICE_CONTROL_READ: string; static ROLE_EMAIL_CREATE: string; static ROLE_EPLAPPS_READ: string; static ROLE_EVENT_ADMIN: string; static ROLE_EVENT_READ: string; static ROLE_GENERIC_MQTT_ADMIN: string; static ROLE_IDENTITY_ADMIN: string; static ROLE_IDENTITY_READ: string; static ROLE_INVENTORY_ADMIN: string; static ROLE_INVENTORY_CREATE: string; static ROLE_INVENTORY_READ: string; static ROLE_MACHINE_LEARNING_READ: string; static ROLE_MANAGED_OBJECT_ADMIN: string; static ROLE_MANAGED_OBJECT_CREATE: string; static ROLE_MANAGED_OBJECT_READ: string; static ROLE_MEASUREMENT_ADMIN: string; static ROLE_MEASUREMENT_READ: string; static ROLE_MQTT_CONNECT_ADMIN: string; static ROLE_MQTT_SERVICE_ADMIN: string; static ROLE_NOTIFICATION_2_ADMIN: string; static ROLE_OPTION_MANAGEMENT_ADMIN: string; static ROLE_OPTION_MANAGEMENT_READ: string; static ROLE_PROVISIONING_CREATE: string; static ROLE_PROVISIONING_READ: string; static ROLE_PROVISIONING_UPDATE: string; static ROLE_REMOTE_ACCESS_ADMIN: string; static ROLE_RETENTION_RULE_ADMIN: string; static ROLE_RETENTION_RULE_READ: string; static ROLE_SCHEDULE_REPORT_ADMIN: string; static ROLE_SIMULATOR_ADMIN: string; static ROLE_SMARTGROUP_ADMIN: string; static ROLE_SMARTGROUP_CREATE: string; static ROLE_SMARTGROUP_UPDATE: string; static ROLE_SMARTRULE_ADMIN: string; static ROLE_SMARTRULE_READ: string; static ROLE_SMS_ADMIN: string; static ROLE_SMS_READ: string; static ROLE_SUPPORT_ADMIN: string; static ROLE_SUPPORT_READ: string; static ROLE_TENANT_ADMIN: string; static ROLE_TENANT_MANAGEMENT_ADMIN: string; static ROLE_TENANT_MANAGEMENT_CREATE: string; static ROLE_TENANT_MANAGEMENT_READ: string; static ROLE_TENANT_MANAGEMENT_UPDATE: string; static ROLE_TENANT_STATISTICS_READ: string; static ROLE_USER_MANAGEMENT_ADMIN: string; static ROLE_USER_MANAGEMENT_CREATE: string; static ROLE_USER_MANAGEMENT_OWN_ADMIN: string; static ROLE_USER_MANAGEMENT_OWN_READ: string; static ROLE_USER_MANAGEMENT_READ: string; constructor(appState: AppStateService, inventory: InventoryService, user: UserService); /** * Checks if the current user has write permissions for the given mo * (either through global role, individual device permissions or via inventory roles). * * ```ts * async canEditGroup(group: IManagedObject): Promise<boolean> { * return await this.permissions.canEdit( * [Permissions.ROLE_INVENTORY_ADMIN, Permissions.ROLE_MANAGED_OBJECT_ADMIN], * group * ); * } * ``` * * @param roleIds The array of role ids to check if the current user have at least one of them. * @param mo The managed object for which we are checking whether the user has access. * @param config A configuration object that can take the following values: `skipRolesCheck`: `boolean` - skips roles check, `skipOwnerCheck`: `boolean` - skips ownership check, `skipRequestCheck`: `boolean` - skips checks with a query to the inventory API. UI will make a query to backend whether the user can edit the managed object. A rejection from BE indicates a lack of permission. * * @returns A Promise resolving to a boolean value. `true` if editing is permitted based on the given parameters and configuration; otherwise, `false`. * */ canEdit(roleIds: string[], mo: IManagedObject | IIdentified, config?: CanEditConfig): Promise<boolean>; /** * Checks if the current user has the specified role. * * ```ts * hasSmsReadRole(): boolean { * return this.permissions.hasRole(Permissions.ROLE_SMS_READ); * }; * ``` * * @param roleId The ID of the role to check against the current user's roles. * @returns A boolean value indicating whether the current user has the specified role. * @throws Error if no user is currently logged in. * */ hasRole(roleId: string): boolean; /** * Checks if the current user possesses all the specified roles. * * ```ts * hasMOReadAndBinaryReadRoles(): boolean { * return this.permissions.hasAllRoles([ * Permissions.ROLE_MANAGED_OBJECT_READ, * Permissions.ROLE_BINARY_READ * ]); * } * ``` * * @param roleIds An array of strings representing the role IDs to check against the current user's roles. * @returns A boolean value indicating whether the current user has all the specified roles. * @throws Error if no user is currently logged in. * */ hasAllRoles(roleIds: string[]): boolean; /** * Checks if the current user possesses any of the specified roles. * * ```ts * hasTenantAdminOrTenantManagementAdminRoles(): boolean { * return this.permissions.hasAnyRole([ * Permissions.ROLE_TENANT_ADMIN, * Permissions.ROLE_TENANT_MANAGEMENT_ADMIN * ]); * }; * ``` * * @param roleIds An array of strings representing the role IDs to check against the current user's roles. * @returns A boolean value indicating whether the current user has any of the specified roles. * @throws Error if no user is currently logged in. * */ hasAnyRole(roleIds: string[]): boolean; /** * Checks if the current user possesses any of the specified global roles. * * ```ts * hasAnyGlobalRoles(dashboard: ContextDashboardManagedObject): boolean { * const globalRolesIds = dashboard?.c8y_Dashboard?.globalRolesIds; * return this.permissions.hasAnyGlobalRole(globalRolesIds); * } * ``` * * @param globalRolesIds An array of numbers representing the global role IDs to check against the current user's roles. * @returns A boolean value indicating whether the current user has any of the specified global roles. * @throws Error if no user is currently logged in. * */ hasAnyGlobalRole(globalRolesIds: number[]): boolean; /** * Checks if the current user is the owner of the managed object. * Utilizes memoization to cache the result based on the managed object's id, * improving performance for subsequent checks of the same object. * * ```ts * const managedObject = { id: '123', owner: 'johnDoe' }; * this.checkIfOwner(managedObject).then(isOwner => { * console.log(isOwner); * }); * ``` * * @param mo The managed object to check ownership against. * @returns A promise that resolves to `true` if the current user is the owner of the managed object, and `false` otherwise. * */ protected checkIfOwner(mo: IManagedObject | IIdentified): Promise<boolean>; /** * Attempts to perform a partial update on a managed object as a means to check for edit permissions. * Utilizes memoization to cache the result based on the managed object's id, * thereby avoiding unnecessary repeated requests for the same object. * * This method essentially tests if the current user has permission to update the managed object, * serving as an indirect permission check. * * ```ts * const managedObject = { id: '456' }; * this.checkWithRequest(managedObject).then(hasPermission => { * console.log(hasPermission); * }).catch(error => { * console.error(error); * }); * ``` * * @param mo The managed object to test edit permissions on. * @returns A promise that resolves to `true` if the update request succeeds (indicating edit permissions), and `false` if it fails. * */ protected checkWithRequest(mo: IManagedObject | IIdentified): Promise<boolean>; /** * Checks if the current user has the necessary permissions to edit a managed object. * This method considers various conditions to determine editability, including role checks, * ownership, and custom request-based checks. Each of these checks can be optionally skipped * based on the provided configuration. * * @param roleIds An array of role IDs to check against the current user's roles. * @param mo The managed object or an identified resource to check edit permissions for. * @param config Configuration options to customize the checks performed. This includes options to skip role checks, owner checks, or custom request checks. * @returns A promise that resolves to `true` if the current user can edit the managed object based on the given conditions, and `false` otherwise. * */ private checkIfCanEdit; static ɵfac: i0.ɵɵFactoryDeclaration<Permissions, never>; static ɵprov: i0.ɵɵInjectableDeclaration<Permissions>; } //# sourceMappingURL=permissions.service.d.ts.map