[]
        
首页
开发者学堂
文档
论坛
市场
生态机会
活动
在线咨询 立即试用
(Showing Draft Content)

权限类型

SpreadJS 表格协同提供两种文档模式:查看模式(View Mode)编辑模式(Edit Mode)。通过权限功能,用户可在查看模式中配置特定操作权限,用于在协同环境中控制各用户的可执行操作。

功能说明

以下是两种文档模式的详细介绍(见 用户与权限 API):

查看模式

  • 用户仅能查看工作簿内容。

  • 可通过权限启用某些 UI 操作(如隐藏行、调整列宽),但这些操作仅在本地生效,不会同步

  • 查看模式下,默认禁用所有可撤销命令。但用户可自定义以下权限以允许特定操作,在不影响数据完整性的前提下优化查看体验:

    • allowNonDataModifyingOperations:允许查看者执行非数据修改操作。

    • allowHideRowsOrColumns:允许隐藏或显示行/列。

    • allowResizeRowsOrColumns:允许调整行/列大小。

    • allowFilter:允许筛选数据。

    • allowSort:允许排序数据。

编辑模式

  • 用户拥有无限制的编辑权限。

  • 所有修改会与其他协同者实时同步。

  • 这是工作簿的默认模式

策略要点

  • 在查看模式下,所有命令操作(包括内置命令和自定义命令)均受限制,但 API 不受限。

  • 在查看模式下,通过权限启用的操作所导致的数据变更仅在本地生效,不会同步。

应用场景

  • 数据查看:处于查看模式的用户可调整 UI(如隐藏行、筛选数据)以分析数据,而不影响其他用户的工作簿。

  • 安全性:细粒度的权限控制可防止未经授权的修改,在协同环境中保护数据。

  • 团队协同:结合状态跟踪,用户可查看他人操作,同时保留对自身功能的控制。

方法

用户可使用 setUser 方法将用户信息绑定到工作簿,或使用 bindPresence 方法将在线状态和用户信息同时绑定到工作簿。

使用方法

以下示例展示如何将用户设置为查看模式,并允许其隐藏/显示行/列、调整行/列大小和筛选数据:

  1. 初始化工作簿和用户信息。

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
    }
};
  1. 将用户信息绑定到工作簿;此方法无需在线状态信息。如需同时绑定在线状态和用户信息,请使用步骤3的方法。

workbook.collaboration.setUser(user);
  1. 将在线状态和用户信息同时绑定到工作簿。

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);

API

  • 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; // 浏览模式为查看模式时,菜单项是否可用。
    }