UNPKG

@univerjs/sheets

Version:

UniverSheet normal base-sheets

412 lines (411 loc) 25 kB
import { RangePermissionPointConstructor, WorkbookPermissionPointConstructor, WorkSheetPermissionPointConstructor, IAuthzIoService, ICommandService, Injector, IPermissionService } from '@univerjs/core'; import { Observable } from 'rxjs'; import { FRange } from './f-range'; import { IRangeProtectionOptions, IWorksheetProtectionOptions } from './permission/permission-types'; import { FBase } from '@univerjs/core/facade'; import { RangeProtectionRuleModel, WorkbookEditablePermission, WorkbookPermissionService, WorksheetEditPermission, WorksheetProtectionPointModel, WorksheetProtectionRuleModel, WorksheetViewPermission } from '@univerjs/sheets'; /** * @description Used to generate permission instances to control permissions for the entire workbook * @deprecated This class is deprecated. Use the new permission API instead: * - For workbook-level permissions, use `workbook.getWorkbookPermission()` * - For worksheet-level permissions, use `worksheet.getWorksheetPermission()` * - For range-level permissions, use `range.getRangePermission()` * * The new API provides: * - More intuitive and type-safe interfaces * - Better support for RxJS Observable streams * - Enum-based permission points instead of class constructors * - Simplified collaborator management * - Mode-based permission settings (viewer, editor, owner, etc.) * * Migration examples: * ```ts * // Old API * const permission = workbook.getPermission(); * await permission.addRangeBaseProtection(unitId, subUnitId, ranges); * * // New API * const worksheet = workbook.getSheetBySheetId(subUnitId); * const permission = worksheet.getWorksheetPermission(); * await permission.protectRanges([{ ranges, options: { name: 'Protected', allowEdit: false } }]); * ``` * @hideconstructor */ export declare class FPermission extends FBase { protected readonly _injector: Injector; protected readonly _commandService: ICommandService; protected readonly _permissionService: IPermissionService; protected readonly _worksheetProtectionRuleModel: WorksheetProtectionRuleModel; protected readonly _rangeProtectionRuleModel: RangeProtectionRuleModel; protected readonly _worksheetProtectionPointRuleModel: WorksheetProtectionPointModel; protected readonly _workbookPermissionService: WorkbookPermissionService; protected readonly _authzIoService: IAuthzIoService; /** * Permission point definition, can read the point constructor want to modify from here */ permissionPointsDefinition: { WorkbookCommentPermission: typeof import('@univerjs/sheets').WorkbookCommentPermission; WorkbookCopyPermission: typeof import('@univerjs/sheets').WorkbookCopyPermission; WorkbookCreateProtectPermission: typeof import('@univerjs/sheets').WorkbookCreateProtectPermission; WorkbookCreateSheetPermission: typeof import('@univerjs/sheets').WorkbookCreateSheetPermission; WorkbookDeleteSheetPermission: typeof import('@univerjs/sheets').WorkbookDeleteSheetPermission; WorkbookDuplicatePermission: typeof import('@univerjs/sheets').WorkbookDuplicatePermission; WorkbookEditablePermission: typeof WorkbookEditablePermission; WorkbookExportPermission: typeof import('@univerjs/sheets').WorkbookExportPermission; WorkbookHideSheetPermission: typeof import('@univerjs/sheets').WorkbookHideSheetPermission; WorkbookHistoryPermission: typeof import('@univerjs/sheets').WorkbookHistoryPermission; WorkbookManageCollaboratorPermission: typeof import('@univerjs/sheets').WorkbookManageCollaboratorPermission; WorkbookMoveSheetPermission: typeof import('@univerjs/sheets').WorkbookMoveSheetPermission; WorkbookPrintPermission: typeof import('@univerjs/sheets').WorkbookPrintPermission; WorkbookRecoverHistoryPermission: typeof import('@univerjs/sheets').WorkbookRecoverHistoryPermission; WorkbookRenameSheetPermission: typeof import('@univerjs/sheets').WorkbookRenameSheetPermission; WorkbookSharePermission: typeof import('@univerjs/sheets').WorkbookSharePermission; WorkbookViewHistoryPermission: typeof import('@univerjs/sheets').WorkbookViewHistoryPermission; WorkbookViewPermission: typeof import('@univerjs/sheets').WorkbookViewPermission; WorksheetCopyPermission: typeof import('@univerjs/sheets').WorksheetCopyPermission; WorksheetDeleteColumnPermission: typeof import('@univerjs/sheets').WorksheetDeleteColumnPermission; WorksheetDeleteProtectionPermission: typeof import('@univerjs/sheets').WorksheetDeleteProtectionPermission; WorksheetDeleteRowPermission: typeof import('@univerjs/sheets').WorksheetDeleteRowPermission; WorksheetEditExtraObjectPermission: typeof import('@univerjs/sheets').WorksheetEditExtraObjectPermission; WorksheetEditPermission: typeof WorksheetEditPermission; WorksheetFilterPermission: typeof import('@univerjs/sheets').WorksheetFilterPermission; WorksheetInsertColumnPermission: typeof import('@univerjs/sheets').WorksheetInsertColumnPermission; WorksheetInsertHyperlinkPermission: typeof import('@univerjs/sheets').WorksheetInsertHyperlinkPermission; WorksheetInsertRowPermission: typeof import('@univerjs/sheets').WorksheetInsertRowPermission; WorksheetManageCollaboratorPermission: typeof import('@univerjs/sheets').WorksheetManageCollaboratorPermission; WorksheetPivotTablePermission: typeof import('@univerjs/sheets').WorksheetPivotTablePermission; WorksheetSetCellStylePermission: typeof import('@univerjs/sheets').WorksheetSetCellStylePermission; WorksheetSetCellValuePermission: typeof import('@univerjs/sheets').WorksheetSetCellValuePermission; WorksheetSetColumnStylePermission: typeof import('@univerjs/sheets').WorksheetSetColumnStylePermission; WorksheetSetRowStylePermission: typeof import('@univerjs/sheets').WorksheetSetRowStylePermission; WorksheetSortPermission: typeof import('@univerjs/sheets').WorksheetSortPermission; WorksheetViewPermission: typeof WorksheetViewPermission; RangeProtectionPermissionEditPoint: typeof import('@univerjs/sheets').RangeProtectionPermissionEditPoint; RangeProtectionPermissionViewPoint: typeof import('@univerjs/sheets').RangeProtectionPermissionViewPoint; }; /** * An observable object used to monitor permission change events within a range, thereby triggering corresponding subsequent processing. */ rangeRuleChangedAfterAuth$: Observable<string>; /** * An observable object used to monitor permission change events within a worksheet, thereby triggering corresponding subsequent processing. */ sheetRuleChangedAfterAuth$: Observable<string>; /** * An observable object used to monitor the initialization state changes of unit permissions. */ unitPermissionInitStateChange$: Observable<boolean>; constructor(_injector: Injector, _commandService: ICommandService, _permissionService: IPermissionService, _worksheetProtectionRuleModel: WorksheetProtectionRuleModel, _rangeProtectionRuleModel: RangeProtectionRuleModel, _worksheetProtectionPointRuleModel: WorksheetProtectionPointModel, _workbookPermissionService: WorkbookPermissionService, _authzIoService: IAuthzIoService); /** * Configures a specific permission point for a workbook. * This function sets or updates a permission point for a workbook identified by `unitId`. * It creates a new permission point if it does not already exist, and updates the point with the provided value. * @param {string} unitId - The unique identifier of the workbook for which the permission is being set. * @param {WorkbookPermissionPointConstructor} FPointClass - The constructor function for creating a permission point instance. Other point constructors can See the [permission-point documentation](https://github.com/dream-num/univer/tree/dev/packages/sheets/src/services/permission/permission-point) for more details. * @param {boolean} value - The boolean value to determine whether the permission point is enabled or disabled. * * @example * ```typescript * const workbook = univerAPI.getActiveWorkbook(); * const permission = workbook.getPermission(); * const unitId = workbook.getId(); * permission.setWorkbookPermissionPoint(unitId, permission.permissionPointsDefinition.WorkbookEditablePermission, false) * ``` */ setWorkbookPermissionPoint(unitId: string, FPointClass: WorkbookPermissionPointConstructor, value: boolean): void; /** * Check if a specific permission point is enabled for a workbook. * @param unitId - The unique identifier of the workbook. * @param FPointClass - The constructor for the permission point class. * See the [permission-point documentation](https://github.com/dream-num/univer/tree/dev/packages/sheets/src/services/permission/permission-point) for more details. * @example * ```typescript * const workbook = univerAPI.getActiveWorkbook(); * const permission = workbook.getPermission(); * const unitId = workbook.getId(); * // Check if the workbook is editable * const isEditable = permission.checkWorkbookPermissionPoint(unitId, permission.permissionPointsDefinition.WorkbookEditablePermission); * console.log('Workbook is editable:', isEditable); * ``` */ checkWorkbookPermissionPoint(unitId: string, FPointClass: WorkbookPermissionPointConstructor): boolean | undefined; /** * This function is used to set whether the workbook can be edited * @param {string} unitId - The unique identifier of the workbook for which the permission is being set. * @param {boolean} value - A value that controls whether the workbook can be edited * * @example * ```typescript * const workbook = univerAPI.getActiveWorkbook(); * const permission = workbook.getPermission(); * const unitId = workbook.getId(); * permission.setWorkbookEditPermission(unitId, false); * ``` */ setWorkbookEditPermission(unitId: string, value: boolean): void; /** * This function is used to add a base permission for a worksheet. * Note that after adding, only the background mask of the permission module will be rendered. If you want to modify the function permissions, * you need to modify the permission points with the permissionId returned by this function. * @param {string} unitId - The unique identifier of the workbook for which the permission is being set. * @param {string} subUnitId - The unique identifier of the worksheet for which the permission is being set. * @param {IWorksheetProtectionOptions} options - Optional protection options including allowed users and name. * @returns {Promise<string | undefined>} - Returns the `permissionId` if the permission is successfully added. If the operation fails or no result is returned, it resolves to `undefined`. * * @example * ```typescript * const workbook = univerAPI.getActiveWorkbook(); * const permission = workbook.getPermission(); * const unitId = workbook.getId(); * const worksheet = workbook.getActiveSheet(); * const subUnitId = worksheet.getSheetId(); * // Note that there will be no permission changes after this step is completed. It only returns an ID for subsequent permission changes. * // For details, please see the example of the **`setWorksheetPermissionPoint`** API. * const permissionId = await permission.addWorksheetBasePermission(unitId, subUnitId, { * allowedUsers: ['user1', 'user2'], * name: 'My Protection' * }) * // Can still edit and read it. * console.log('debugger', permissionId) * ``` */ addWorksheetBasePermission(unitId: string, subUnitId: string, options?: IWorksheetProtectionOptions): Promise<string | undefined>; /** * Delete the entire table protection set for the worksheet and reset the point permissions of the worksheet to true * @param {string} unitId - The unique identifier of the workbook for which the permission is being set. * @param {string} subUnitId - The unique identifier of the worksheet for which the permission is being set. * * @example * ```typescript * const workbook = univerAPI.getActiveWorkbook(); * const permission = workbook.getPermission(); * const unitId = workbook.getId(); * const worksheet = workbook.getActiveSheet(); * const subUnitId = worksheet.getSheetId(); * permission.removeWorksheetPermission(unitId, subUnitId); * ``` */ removeWorksheetPermission(unitId: string, subUnitId: string): void; /** * Sets the worksheet permission point by updating or adding the permission point for the worksheet. * If the worksheet doesn't have a base permission, it creates one to used render * @param {string} unitId - The unique identifier of the workbook. * @param {string} subUnitId - The unique identifier of the worksheet. * @param {WorkSheetPermissionPointConstructor} FPointClass - The constructor for the permission point class. * See the [permission-point documentation](https://github.com/dream-num/univer/tree/dev/packages/sheets/src/services/permission/permission-point) for more details. * @param {boolean} value - The new permission value to be set for the worksheet. * @returns {Promise<string | undefined>} - Returns the `permissionId` if the permission point is successfully set or created. If no permission is set, it resolves to `undefined`. * * @example * ```typescript * const workbook = univerAPI.getActiveWorkbook(); * const permission = workbook.getPermission(); * const unitId = workbook.getId(); * const worksheet = workbook.getActiveSheet(); * const subUnitId = worksheet.getSheetId(); * const permissionId = await permission.addWorksheetBasePermission(unitId, subUnitId) * // After this line of code , the worksheet will no longer be editable * permission.setWorksheetPermissionPoint(unitId, subUnitId, permission.permissionPointsDefinition.WorksheetEditPermission, false); * ``` */ setWorksheetPermissionPoint(unitId: string, subUnitId: string, FPointClass: WorkSheetPermissionPointConstructor, value: boolean): Promise<string | undefined>; /** * Check if a specific permission point is enabled for a worksheet. * @param unitId - The unique identifier of the workbook. * @param subUnitId - The unique identifier of the worksheet. * @param FPointClass - The constructor for the permission point class. * See the [permission-point documentation](https://github.com/dream-num/univer/tree/dev/packages/sheets/src/services/permission/permission-point) for more details. * @returns {boolean | undefined} - Returns true if the permission point is enabled, false if it is disabled, or undefined if the permission point does not exist. * @example * ```typescript * const workbook = univerAPI.getActiveWorkbook(); * const permission = workbook.getPermission(); * const unitId = workbook.getId(); * const worksheet = workbook.getActiveSheet(); * const subUnitId = worksheet.getSheetId(); * // Check if the worksheet is editable * const isEditable = permission.checkWorksheetPermissionPoint(unitId, subUnitId, permission.permissionPointsDefinition.WorksheetEditPermission); * console.log('Worksheet is editable:', isEditable); * ``` */ checkWorksheetPermissionPoint(unitId: string, subUnitId: string, FPointClass: WorkSheetPermissionPointConstructor): boolean | undefined; /** * Adds a range protection to the worksheet. * Note that after adding, only the background mask of the permission module will be rendered. If you want to modify the function permissions, * you need to modify the permission points with the permissionId returned by this function. * @deprecated Use `worksheet.getWorksheetPermission().protectRanges()` instead * @param {string} unitId - The unique identifier of the workbook. * @param {string} subUnitId - The unique identifier of the worksheet. * @param {FRange[]} ranges - The ranges to be protected. * @param {IRangeProtectionOptions} options - Optional protection options including allowed users and name. * @returns {Promise<{ permissionId: string, ruleId: string } | undefined>} - Returns an object containing the `permissionId` and `ruleId` if the range protection is successfully added. If the operation fails or no result is returned, it resolves to `undefined`. permissionId is used to stitch permission point ID,ruleId is used to store permission rules * * @example * ```typescript * // Old API * const workbook = univerAPI.getActiveWorkbook(); * const permission = workbook.getPermission(); * const unitId = workbook.getId(); * const worksheet = workbook.getActiveSheet(); * const subUnitId = worksheet.getSheetId(); * const range = worksheet.getRange('A1:B2'); * const ranges = []; * ranges.push(range); * const res = await permission.addRangeBaseProtection(unitId, subUnitId, ranges, { * name: 'Protected Area', * allowEdit: false * }); * const {permissionId, ruleId} = res; * console.log('debugger', permissionId, ruleId); * * // New API (recommended) * const worksheet = univerAPI.getActiveWorkbook().getActiveSheet(); * const permission = worksheet.getWorksheetPermission(); * const range = worksheet.getRange('A1:B2'); * await permission.protectRanges([{ * ranges: [range], * options: { name: 'Protected Area', allowEdit: false } * }]); * ``` */ addRangeBaseProtection(unitId: string, subUnitId: string, ranges: FRange[], options?: IRangeProtectionOptions): Promise<{ permissionId: string; ruleId: string; } | undefined>; /** * Determine view state from range protection options * @private */ private _determineRangeViewState; /** * Determine edit state from range protection options * @private */ private _determineRangeEditState; /** * Removes the range protection from the worksheet. * @deprecated Use `worksheet.getWorksheetPermission().unprotectRules()` instead * @param {string} unitId - The unique identifier of the workbook. * @param {string} subUnitId - The unique identifier of the worksheet. * @param {string[]} ruleIds - The rule IDs of the range protection to be removed. * * @example * ```typescript * // Old API * const workbook = univerAPI.getActiveWorkbook(); * const permission = workbook.getPermission(); * const unitId = workbook.getId(); * const worksheet = workbook.getActiveSheet(); * const subUnitId = worksheet.getSheetId(); * const range = worksheet.getRange('A1:B2'); * const ranges = []; * ranges.push(range); * const res = await permission.addRangeBaseProtection(unitId, subUnitId, ranges); * const ruleId = res.ruleId; * permission.removeRangeProtection(unitId, subUnitId, [ruleId]); * * // New API (recommended) * const worksheet = univerAPI.getActiveWorkbook().getActiveSheet(); * const permission = worksheet.getWorksheetPermission(); * await permission.unprotectRules([ruleId]); * ``` */ removeRangeProtection(unitId: string, subUnitId: string, ruleIds: string[]): void; /** * Modify the permission points of a custom area * @param {string} unitId - The unique identifier of the workbook. * @param {string} subUnitId - The unique identifier of the worksheet within the workbook. * @param {string} permissionId - The unique identifier of the permission that controls access to the range. * @param {RangePermissionPointConstructor} FPointClass - The constructor for the range permission point class. * See the [permission-point documentation](https://github.com/dream-num/univer/tree/dev/packages/sheets/src/services/permission/permission-point) for more details. * @param {boolean} value - The new permission value to be set for the range (e.g., true for allowing access, false for restricting access). * * @example * ```typescript * const workbook = univerAPI.getActiveWorkbook(); * const permission = workbook.getPermission(); * const unitId = workbook.getId(); * const worksheet = workbook.getActiveSheet(); * const subUnitId = worksheet.getSheetId(); * const range = worksheet.getRange('A1:B2'); * const ranges = []; * ranges.push(range); * // Note that there will be no permission changes after this step is completed. It only returns an ID for subsequent permission changes. * // For details, please see the example of the **`setRangeProtectionPermissionPoint`** API. * const res = await permission.addRangeBaseProtection(unitId, subUnitId, ranges); * const {permissionId, ruleId} = res; * // After passing the following line of code, the range set above will become uneditable * permission.setRangeProtectionPermissionPoint(unitId,subUnitId,permissionId, permission.permissionPointsDefinition.RangeProtectionPermissionEditPoint, false); * ``` */ setRangeProtectionPermissionPoint(unitId: string, subUnitId: string, permissionId: string, FPointClass: RangePermissionPointConstructor, value: boolean): void; /** * Sets the ranges for range protection in a worksheet. * * This method finds the rule by unitId, subUnitId, and ruleId, and updates the rule with the provided ranges. * It checks for overlaps with existing ranges in the same subunit and shows an error message if any overlap is detected. * If no overlap is found, it executes the command to update the range protection with the new ranges. * @param {string} unitId - The unique identifier of the workbook. * @param {string} subUnitId - The unique identifier of the worksheet within the workbook. * @param {string} ruleId - The ruleId of the range protection rule that is being updated. * @param {FRange[]} ranges - The array of new ranges to be set for the range protection rule. * * @example * ```typescript * const workbook = univerAPI.getActiveWorkbook(); * const permission = workbook.getPermission(); * const unitId = workbook.getId(); * const worksheet = workbook.getActiveSheet(); * const subUnitId = worksheet.getSheetId(); * const range = worksheet.getRange('A1:B2'); * const ranges = []; * ranges.push(range); * const res = await permission.addRangeBaseProtection(unitId, subUnitId, ranges); * const {permissionId, ruleId} = res; * const newRange = worksheet.getRange('C1:D2'); * permission.setRangeProtectionRanges(unitId, subUnitId, ruleId, [newRange]); * ``` */ setRangeProtectionRanges(unitId: string, subUnitId: string, ruleId: string, ranges: FRange[]): void; /** * Get the permission information for a specific cell in a worksheet. * @param {string} unitId - The unique identifier of the workbook. * @param {string} subUnitId - The unique identifier of the worksheet within the workbook. * @param {number} row - The row index of the cell. * @param {number} column - The column index of the cell. * @returns {{ permissionId: string, ruleId: string } | undefined} - Returns an object containing the `permissionId` and `ruleId` if the cell is protected by a range protection rule. If no protection is found, it returns `undefined`. * * @example * ```typescript * const fWorkbook = univerAPI.getActiveWorkbook(); * const fWorksheet = fWorkbook.getActiveSheet(); * const permission = fWorkbook.getPermission(); * const unitId = fWorkbook.getId(); * const subUnitId = fWorksheet.getSheetId(); * * // Get the permission information for cell C3 * const cell = fWorksheet.getRange('C3'); * const permissionInfo = permission.getPermissionInfoWithCell( * unitId, * subUnitId, * cell.getRow(), * cell.getColumn() * ); * console.log(permissionInfo); * * // If the cell is protected, you can remove the protection like this: * if (permissionInfo) { * const { ruleId } = permissionInfo; * * // After 2 seconds, remove the protection for the cell * setTimeout(() => { * permission.removeRangeProtection(unitId, subUnitId, [ruleId]); * }, 2000); * } * ``` */ getPermissionInfoWithCell(unitId: string, subUnitId: string, row: number, column: number): { permissionId: string; ruleId: string; } | undefined; }