[]
SpreadJS 表格协同提供两种文档模式:查看模式(View Mode) 和 编辑模式(Edit Mode)。通过权限功能,用户可在查看模式中配置特定操作权限,用于在协同环境中控制各用户的可执行操作。
以下是两种文档模式的详细介绍(见 用户与权限 API):
用户仅能查看工作簿内容。
可通过权限启用某些 UI 操作(如隐藏行、调整列宽),但这些操作仅在本地生效,不会同步。
在查看模式下,默认禁用所有可撤销命令。但用户可自定义以下权限以允许特定操作,在不影响数据完整性的前提下优化查看体验:
allowNonDataModifyingOperations:允许查看者执行非数据修改操作。
allowHideRowsOrColumns:允许隐藏或显示行/列。
allowResizeRowsOrColumns:允许调整行/列大小。
allowFilter:允许筛选数据。
allowSort:允许排序数据。
用户拥有无限制的编辑权限。
所有修改会与其他协同者实时同步。
这是工作簿的默认模式。
在查看模式下,所有命令操作(包括内置命令和自定义命令)均受限制,但 API 不受限。
在查看模式下,通过权限启用的操作所导致的数据变更仅在本地生效,不会同步。
数据查看:处于查看模式的用户可调整 UI(如隐藏行、筛选数据)以分析数据,而不影响其他用户的工作簿。
安全性:细粒度的权限控制可防止未经授权的修改,在协同环境中保护数据。
团队协同:结合状态跟踪,用户可查看他人操作,同时保留对自身功能的控制。
用户可使用 setUser 方法将用户信息绑定到工作簿,或使用 bindPresence 方法将在线状态和用户信息同时绑定到工作簿。
以下示例展示如何将用户设置为查看模式,并允许其隐藏/显示行/列、调整行/列大小和筛选数据:
初始化工作簿和用户信息。
const workbook = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 2 });
// 模拟用户数据(通常从服务器获取)
const user = {
id: "896736#B1WZd2yQ",
name: "chris",
color: "#FF0000",
permission: {
mode: GC.Spread.Sheets.Collaboration.BrowsingMode.view,
viewModePermissions: GC.Spread.Sheets.Collaboration.PermissionTypes.allowHideRowsOrColumns
| GC.Spread.Sheets.Collaboration.PermissionTypes.allowResizeRowsOrColumns
| GC.Spread.Sheets.Collaboration.PermissionTypes.allowFilter
}
};将用户信息绑定到工作簿;此方法无需在线状态信息。如需同时绑定在线状态和用户信息,请使用步骤3的方法。
workbook.collaboration.setUser(user);将在线状态和用户信息同时绑定到工作簿。
const presence = new Presence<IPresence>(conn);
bindPresence(workbook, presence, user);import { Presence } from "js-collaboration-presence-client";
import { bindPresence, IPresence } from "spread-sheets-collaboration-client";
// 初始化工作簿
const workbook = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 2 });
// 模拟用户数据(通常从服务器获取)
const user = {
id: "896736#B1WZd2yQ",
name: "chris",
color: "#FF0000",
permission: {
mode: GC.Spread.Sheets.Collaboration.BrowsingMode.view,
viewModePermissions: GC.Spread.Sheets.Collaboration.PermissionTypes.allowHideRowsOrColumns
| GC.Spread.Sheets.Collaboration.PermissionTypes.allowResizeRowsOrColumns
| GC.Spread.Sheets.Collaboration.PermissionTypes.allowFilter
}
};
// 将工作簿与用户绑定,不含在线状态信息
workbook.collaboration.setUser(user);spread-sheets-collaboration-client
/**
* 定义浏览模式
* @enum {number}
*/
export enum BrowsingMode {
/** 指定用户可编辑文档。
* @type {number}
*/
edit,
/** 指定用户仅可查看文档。
* @type {number}
*/
view,
}
/**
* 定义权限类型
* @enum {number}
*/
export enum PermissionTypes {
/** 指定查看者可执行非数据修改操作。
* @type {number}
*/
allowNonDataModifyingOperations,
/** 指定查看者可隐藏/取消隐藏行/列。
* @type {number}
*/
allowHideRowsOrColumns,
/** 指定查看者可调整行/列大小。
* @type {number}
*/
allowResizeRowsOrColumns,
/** 指定查看者可筛选区域。
* @type {number}
*/
allowFilter,
/** 指定查看者可排序。
* @type {number}
*/
allowSort,
}
export interface IPermission {
mode: BrowsingMode;
viewModePermissions?: PermissionTypes;
}
export interface IUser {
id: string;
name: string;
color?: string;
permission?: IPermission;
}GC.Spread.Sheets.ContextMenu
interface GC.Spread.Sheets.ContextMenu.IMenuItemData {
...
metaData?: GC.Spread.Sheets.ICommandMetaData; // metaData 是用于将某些信息附加到 menuItemData 的对象。
}
export interface ICommandMetaData{
viewModePermissions: GC.Spread.Sheets.Collaboration.PermissionTypes; // 浏览模式为查看模式时,菜单项是否可用。
}