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

设计器权限

设计器支持查看模式权限控制。当用户权限设置为查看模式时,默认上下文菜单项将被隐藏,功能区项将被禁用。

核心功能

如果当前用户的权限设置为查看模式,设计器的功能区和上下文菜单将相应调整。

当用户权限处于查看模式时,默认情况下,上下文菜单项将被隐藏,功能区项将被禁用。如果用户需要使自定义上下文菜单项或功能区项在查看模式下可用,必须向ICommand添加属性:

  • 功能区项:需要设置属性viewModeEnableContext

  • 上下文菜单项:需要设置属性viewModeVisibleContext

  • metaData:需要向该项执行的命令添加metaData属性,在其中设置viewModePermission属性以控制命令在哪些权限类型下可用。

默认情况下,当当前用户权限为仅查看时,内置功能区项和上下文菜单项的行为如下:

  • 功能区:功能区项将根据权限设置为不可用。默认情况下,仅启用复制、查找、查找…和转到…。

    designer_permission_support1

    designer_permission_support2

  • 当用户的viewModePermission包含allowNonDataModifyingOperations时,功能区上的复制、查找、查找…和转到…将被启用。

  • 当用户的viewModePermission包含allowHideRowsOrColumns时,功能区上的复制、查找、查找…和转到…将被启用。

  • 当用户的viewModePermission包含allowResizeRowsOrColumns时,功能区上的复制、查找、查找…和转到…将被启用。

  • 当用户的viewModePermission包含allowFilter时,功能区上的复制、查找、查找…、转到…、排序和筛选、筛选、清除筛选和重新应用将被启用。

    designer_permission_support3

    designer_permission_support4

  • 当用户的viewModePermission包含allowSort时,功能区上的复制、查找、查找…、转到…、排序和筛选、升序排序、降序排序和自定义排序…将被启用。

    designer_permission_support5

    designer_permission_support6

  • 上下文菜单:菜单项将根据权限隐藏。

    • 当用户的viewModePermission包含allowNonDataModifyingOperations时,上下文菜单将显示复制。

      designer_permission_support7

    • 当用户的viewModePermission包含allowHideRowsOrColumns时,上下文菜单将显示复制、隐藏和取消隐藏。

      image

    • 当用户的viewModePermission包含allowResizeRowsOrColumns时,上下文菜单将显示复制、行高…和列宽…。

      designer_permission_support9

    • 当用户的viewModePermission包含allowFilter时,上下文菜单将显示复制和筛选。

      designer_permission_support10

    • 当用户的viewModePermission包含allowSort时,上下文菜单将显示复制、排序、升序排序和降序排序。

      designer_permission_support11

接口

interface GC.Spread.Sheets.Designer.ICommand {
  ...,
  viewModeVisibleContext?: string; // 用于上下文菜单项
  viewModeEnableContext?: string; // 用于功能区项
}

示例代码

假设需要向设计器功能区添加新的功能区项“自动调整所有”。单击它可以自动调整当前工作表的所有行和列。当用户处于编辑模式或处于查看模式allowResizeRowsOrColumns时可用。

要完成此功能:

  1. 获取用户的权限信息,并记录用户是否allowsResizeRowsOrColumns

  2. 将命令添加到config的commandMap中。请注意,该命令需要设置viewModeEnableContext属性。

  3. 添加命令组,将命令放入组中,并将此命令组添加到功能区config中。

  4. 将config设置到设计器。

// 更新当前用户权限信息。
// 1. 需要获取用户的权限信息,并记录用户是否为allowsResizeRowsOrColumns。
const user = spread.collaboration.getUser(),
  permission = user && user.permission,
  browsingMode = permission && permission.mode,
  viewModePermissions = permission && permission.viewModePermissions;
const AllowViewModeResizeRowsOrColumnsFlag = "allowViewModeResizeRowsOrColumns";
if (browsingMode === GC.Spread.Sheets.Collaboration.BrowsingMode.view && viewModePermissions & GC.Spread.Sheets.Collaboration.PermissionTypes.allowResizeRowsOrColumns) {
  designer.setData(AllowViewModeResizeRowsOrColumnsFlag , true);
}

// 添加自定义命令“AutoFitAll”
// 2. 将命令添加到config的commandMap中。请注意,该命令需要设置viewModeEnableContext属性。
const autoFitAllCommand = {
    text: "AutoFitAll",
    commandName: "autoFitAll",
    iconClass: "ribbon-button-autofit-all",
    bigButton: true,
    viewModeEnableContext: AllowViewModeResizeRowsOrColumnsFlag, // 如果用户不在查看模式,或者用户在查看模式但viewModePermissions包含allowResizeRowsOrColumns
    execute: (context) => {
        const spread = context.Spread, sheet = spread.getActiveSheet(), rowCount = sheet.getRowCount(), colCount = sheet.getColumnCount();
        spread.collaboration.startBatchOp();
        sheet.suspendPaint();
        for (let i = 0; i < rowCount; i++) {
          sheet.autoFitRow(i);
        }
        for (let i = 0; i < colCount; i++) {
            sheet.autoFitColumn(i);
        }
        sheet.resumePaint();
        spread.collaboration.endBatchOp();
    }
}
const config = GC.Spread.Sheets.Designer.DefaultConfig;
config.commandMap = {
  autoFitAll: autoFitAllCommand
};
// 3. 添加命令组,将命令放入组中,并将此命令组添加到功能区config中。
const autoFitCommandGroup = {
  label: "AutoFit",
  thumbnailClass: "AutoFit",
  commandGroup: {
    children: [{
      direction: "vertical",
      commands: ["autoFitAll"]
    }]
  }
}
config.ribbon[0].buttonGroups.unshift(autoFitCommandGroup);
// 4. 将config设置到设计器。
designer.setConfig(config);