在员工离职或出于其它安全考虑,企业需要对员工创建或管理的文件进行管控,或对扫描出敏感信息的文件进行管控,限制文件下载。

如何限制企业用户下载特定文件

本定制方案仅适用于私有化WPS365版本

1. 方案概述

员工离职前,出于安全考虑,企业会对其创建或管理的文件进行管控。

管控会有两个实现方式:

  • 给文档加水印
  • 禁止员工下载

有安全管控需求时,比如文件扫描出敏感信息,用户的网络环境(内网或外网)、文件大小不满足管理规定,都有可能需要限制下载。

针对这两种情况,我们可以使用文档中心Web端(PC端)的开放能力,定制下载功能:

实现效果对文档进行管控后,员工下载文件时,会对文件进行处理,比如加水印;VZOKHCA4ABAFC也会限制下载,比如员工点击下载按钮,会出现下载失败的提示。TOMWRCA4ADQC6
支持端文档中心PC端
版本限制版本23-11a(含)以上
操作系统限制支持X86、XC

2. 使用指南

单文件下载判断拦截

👉能力

dc_file.PreCheckGetFileDownloadUrl

👉方法

PostGetFileDownloadUrl:单文件下载时获取文件下载 Url 进行定制

策略触发接口
dc_file.PreCheckGetFileDownloadUrl/file/u/v1/drives/{drive_id}/files/{file_id}/download

👉可检查的字段

名称类型是否可以修改描述版本号
AccountIdstring账户Id23-11a
CompanyIdstring企业Id23-11a
DriveIdstring文件存放的盘Id23-11a
FileIdstring文件Id23-11a

可以根据文件 ID调用 GetFileInfo 获取文件详细信息与路径

👉代码示例

// 单文件下载预检查
async function PreCheckGetFileDownloadUrl(
  ctx: service.PreCheckGetFileDownloadUrlContext
) {
  const input = ctx.ContextValue()

  // 根据文件id获取文件详细信息
  const fileInfo = componentInst.dc_drive.MAIN.GetFileInfo(
    ctx.GoContext(),
    input.DriveId,
    input.FileId
  )

  // 根据文件id获取文件路径
  const filePath = componentInst.dc_drive.MAIN.GetFilePath(
    ctx.GoContext(),
    input.DriveId,
    input.FileId
  )

  // TODO: 根据文件详情自定义限制条件,比如: 文件大小限制
  const ext = fileExt(fileInfo.Name)
  // 文件名包含“test_”则返回错误
  if (fileInfo.Name.includes('test_'))
    throw new JSBizError(400, 'test_ 文件被限制')
  return
}

👉效果截图

TOMWRCA4ADQC6

单文件下载时获取文件下载URL进行定制

👉能力

dc_file.PostGetFileDownloadUrl

👉方法

PostGetFileDownloadUrl:单文件下载时获取文件下载 Url 进行定制

策略触发接口
dc_file.PostGetFileDownloadUrl/file/u/v1/drives/{drive_id}/files/{file_id}/download

👉可检查的字段

名称类型是否可以修改描述版本号
FileIdstring文件Id23-11a
DriveIdstring文件存放的盘Id23-11a
Urlstring文件下载路径23-11a

文件下载路径可以通过埋点修改

返回值:

名称类型描述版本号
Urlstring文件下载路径23-11a

文件下载路径可以通过埋点修改

👉代码示例

修改返回的 url

可以导入添加水印、导出为PDF等第三方接口,对文件进行定制

// 单文件下载 url
async function PostGetFileDownloadUrl(
  ctx: service.PostGetFileDownloadUrlContext
) {
  const input = ctx.ContextValue()
  const output = ctx.Result()

  const fileInfo = componentInst.dc_drive.MAIN.GetFileInfo(
    ctx.GoContext(),
    input.DriveId,
    input.FileId
  )
  // 文件后缀为demo,则下载为自定义地址
  const ext = fileExt(fileInfo.Name)
  if (ext === 'demo') {
    // 修改返回路径
    output.Url = 'http://demo_url/' + fileInfo.Id
    return
  }
  return
}

👉效果截图

VZOKHCA4ABAFC

批量文件下载之前进行检查时对文件进行定制

👉能力

dc_file.PreCheckPostBatchDownloadFile

👉方法

PreCheckPostBatchDownloadFile:批量文件下载之前进行检查时对文件进行定制

策略触发接口
dc_file.PreCheckPostBatchDownloadFile/file/u/v1/drives/{drive_id}/files/batch_download/check

👉可检查字段

名称类型是否可以修改描述版本号
AccountIdstring账户Id23-11a
CompanyIdstring企业Id23-11a
FileIdsstring[]批量下载的文件Id列表23-11a
DriveIdstring文件存放的盘Id23-11a
WpsSidstring用来做url鉴权23-11a
WithChecksumboolean是否校验文件一致性23-11a
MaxSizenumber系统后台读取到的文件最大下载数量23-11a
MaxNumnumber系统后台读取到的文件最大下载大小23-11a

根据文件id 调用 GetFileInfo 可以获取文件具体信息

返回值: 无

👉代码示例

示例: 根据批量下载的文件夹列表获取文件下载路径

// 批量下载预检查
asyncfunctionPreCheckPostBatchDownloadFile(ctx: service.PreCheckPostBatchDownloadFileContext) {
    const input = ctx.ContextValue()

    // TODO: 自定义限制条件,比如:数量限制、大小限制等 // 根据 FileId 等获取文件详情
const fileInfo = componentInst.dc_drive.MAIN.GetFileInfo(ctx.GoContext(), input.DriveId, input.FileIds[0])
    log.Debug("--DEUBG: dc_file: PreCheckPostBatchDownloadFile: componentInst._drive._main_inst.GetFileInfo: ", JSON.stringify(fileInfo))


    // 通过 Type 区分文件与文件夹 file 文件、folder为文件夹
if (fileInfo.Type == "folder") {
        const req: ListFileInFolderByOffsetReq = {
            DriveId: input.DriveId,
            Limit: 1000,
            Offset: 0,
            ParentId: fileInfo.ParentId
        }

        // 获取文件夹下的文件
const childrenFile = componentInst.dc_drive.MAIN.ListFileInFolderByOffset(ctx.GoContext(), req)
    } else {
        // 如果不是文件夹,根据 FileId 等获取文件下载url
const res = componentInst.dc_file.MAIN.CheckPermToFileDownload(ctx.GoContext(), input.CompanyId, input.AccountId, input.FileIds[0], input.DriveId, input.WpsSid, input.WithChecksum)
    }
    return
}

👉效果截图

46IV3DA4ABAFI

批量文件下载时对文件进行前置检查定制

👉能力

dc_file.PreBatchDownloadFile

策略触发接口
dc_file.PreBatchDownloadFile/file/u/v1/drives/{drive_id}/files/batch_download

PreBatchDownloadFile:批量文件下载时对文件进行前置检查定制

👉可检查的字段

名称类型是否可以修改描述版本号
AccountIdstring账户Id23-11a
CompanyIdstring企业Id23-11a
FileIdsstring[]批量下载的文件Id列表23-11a
DriveIdstring文件存放的盘Id23-11a
WpsSidstring用来做url鉴权23-11a
WithChecksumboolean是否校验文件一致性23-11a

根据文件 id 调用 GetFileInfo 可以获取文件具体信息

**返回值:**无

👉代码示例

asyncfunctionPreBatchDownloadFile(ctx: service.PreBatchDownloadFileContext) {
    const input = ctx.ContextValue()
    // TODO: 自定义限制条件,比如:数量限制、大小限制等 return
}

单文件历史版本下载时对文件进行前置检查定制

👉能力

dc_file.PreCheckGetVersionDownloadUrl

PreCheckGetVersionDownloadUrl:单文件历史版本下载时对文件进行前置检查定制

👉可检查的字段

名称类型是否可以修改描述版本号
AccountIdstring账户Id23-11a
CompanyIdstring企业Id23-11a
DriveIdstring文件存放的盘Id23-11a
FileIdstring文件Id23-11a
Versionnumber文件历史历史版本23-11a

**返回值:**无

👉代码示例

// 历史版本下载asyncfunctionPreCheckGetVersionDownloadUrl(ctx: service.PreCheckGetVersionDownloadUrlContext) {
    const input = ctx.ContextValue()
    // TODO: 自定义限制条件return
}

单文件历史版本下载时获取Url进行定制

👉能力

dc_file.PostGetVersionDownloadUrl

PostGetVersionDownloadUrl:单文件历史版本下载时获取Url进行定制

👉可检查的字段

名称类型是否可以修改描述版本号
FileIdstring文件Id23-11a
DriveIdstring文件存放的盘Id23-11a
Urlstring文件下载路径23-11a

文件下载路径可以通过埋点修改

返回值:

名称类型描述版本号
Urlstring文件下载路径23-11a

👉代码示例

修改 url 路径

input、ouptut 均属于可以检查字段

asyncfunctionPostGetVersionDownloadUrl(ctx: service.PostGetVersionDownloadUrlContext) {
    const input = ctx.ContextValue()
    const output = ctx.Result()
    // 修改返回 url
    output.Url = "your url"return
}

批量下载修改下载url接口

👉能力

dc_file.PostBatchDownloadUrl

批量下载修改下载url接口,该埋点是被服务端循环调用,针对批量下载的文件循环遍历,调用埋点逻辑

返回值:

名称类型描述版本号
DownloadUrlstring文件下载路径,即是入参也是返回结果23-11a

👉代码示例

修改 文件下载地址

asyncfunctionPostBatchDownloadUrl(ctx: service.PostBatchDownloadUrlContext) {
    // TODOif (ctx.Result().DownloadUrl === "http://fdsaf"){
        ctx.Result().DownloadUrl="新地址"
    }
}

相关新闻

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

立即咨询 立即试用 上门服务

请您留言

感谢您的关注,你可留下联系方式,我们将第一时间与您联系。