SpreadJS 权限控制实战

简介: SpreadJS 提供三层权限控制:工作表保护(isProtected)、单元格锁定(locked)与交互选项(protectionOptions),支持按区域精细授权;结合 enableContext 动态控制顶部菜单显隐,实现“选中可编辑区菜单可用、锁定区自动置灰”,兼顾安全性与用户体验。

从表单保护到按单元格控制顶部菜单

在报价单、预算表和填报系统中,权限控制很少是简单地把整张表设为只读。更常见的做法是:锁定表头和公式,只开放输入区域;保护状态下仍允许筛选、分组或调整格式;当用户选中不同区域时,顶部菜单也随之变化。

SpreadJS 将这些能力拆分为工作表保护、单元格锁定和交互选项三个层次。理解这三个层次后,大多数权限场景都可以用很少的代码组合出来。

Image

图 1 SpreadJS 权限控制的三个层次

先确定哪些区域可以编辑

在 Excel 的保护模型中,单元格默认按 locked=true 处理。因此,对于“默认只读、少量区域可填”的表单,通常只需要把输入区域设置为 locked=false,再开启工作表保护:

const sheet = workbook.getActiveSheet()

 // B2:B5 是用户输入区域,其他单元格保持锁定
 sheet.getRange(1, 1, 4, 1).locked(false)
 sheet.options.isProtected = true

如果业务是“默认可编辑、少量区域只读”,则反过来先解锁整张表,再锁定指定区域:

sheet.getRange(0, 0, rowCount, colCount).locked(false)
 sheet.getRange(1, 1, 4, 1).locked(true)
 sheet.options.isProtected = true

需要区分的是:locked 决定单元格能否编辑,isProtected 决定保护是否生效。两者缺一不可。

保护状态下的操作权限

protectionOptions 用来补充保护状态下的操作权限。例如,表格不能修改内容,但仍希望用户可以筛选、排序、展开行分组或调整行高,可以按需配置:

sheet.options.protectionOptions = {
  allowSort: true,
  allowFilter: true,
  allowOutlineRows: true,
  formatRows: true
 }

常用选项还包括 allowSelectLockedCells、allowSelectUnlockedCells、allowResizeColumns、allowInsertRows、allowDeleteRows、allowOutlineColumns,以及 Designer 场景下的 formatCells、formatRows 和 formatColumns。它们控制的是保护状态下的操作,不会把锁定单元格自动变成可编辑。

让顶部菜单跟着选区变化

如果只设置 formatCells,Designer 会在保护状态下保留格式相关命令,但它并不知道当前选区是否可编辑。要实现“选中可编辑区域时菜单可用,选中锁定区域时菜单置灰”,可以给命令的 enableContext 增加一个自定义开关。

const CONTROL_KEY = 'controlByMyself'
 sheet.options.protectionOptions = { formatCells: true }
 sheet.options.isProtected = true

 function selectionEditable() {
  const range = workbook.getActiveSheet().getSelections()[0]
  if (!range) return false
  for (let r = range.row; r < range.row + range.rowCount; r++) {
    for (let c = range.col; c < range.col + range.colCount; c++) {
      if (sheet.getCell(r, c).locked()) return false
    }
  }
  return true
 }

 workbook.bind(GC.Spread.Sheets.Events.SelectionChanged, () => {
  designer.setData(CONTROL_KEY, !selectionEditable())
  designer.refresh()
 })

在 Designer 命令配置中,将需要控制的命令改为“原有条件并且不是 controlByMyself”。当选区中包含一个 locked 单元格时,自定义开关为 true,相关命令就会置灰。混合选区采用这种规则也更安全。

Image

Image

图 2 可编辑选区与锁定选区的菜单状态示意

实践中的三个建议

  • 优先采用“默认只读、按需开放”的设计,公式、汇总结果和说明列保持 locked=true。
  • 提前约定混合选区规则。只要选区包含锁定单元格就禁用菜单,通常比部分执行更容易理解,也更不容易误修改。
  • 前端保护主要解决交互和误操作问题,不能替代后端授权。提交数据时仍应校验用户身份、字段权限、数据范围和公式结果。

小结:用 isProtected 开启保护,用 locked 划分可编辑区域,用 protectionOptions 放开必要操作,再用 enableContext 让 Designer 菜单随当前选区联动。这样既能保持表格的可用性,也能让用户清楚地知道当前区域可以做什么。

相关文章
|
1天前
|
缓存 BI 测试技术
BI 环境管理,不只是多搭几套服务器
企业BI工程化需超越报表开发,构建开发、测试、生产三环境体系:隔离风险、规范发布、验证数据与权限,实现BI资源全生命周期的可控、可追踪、可回滚。核心是让每一次变化有边界、有责任、有证据。
BI 环境管理,不只是多搭几套服务器
|
2天前
|
人工智能 前端开发 IDE
AI 写代码提速了,交付周期为什么没有缩短
AI写代码虽快,但企业应用交付仍卡在“生成→拼装”断层:数据库、接口、页面需人工搬运、联调、适配,工具切换频繁、业务上下文难对齐。活字格V12.1打通双路径——IDE中MCP服务让AI懂平台规则;低代码平台内AI助手直接产出可运行的数据表、命令与页面,消除复制粘贴,实现从需求到应用的“零搬运”交付。
AI 写代码提速了,交付周期为什么没有缩短
|
1天前
|
供应链 算法 数据可视化
SpreadJS生产计划排产应用价值
生产计划排产是制造企业连接订单、物料、设备与交付的关键枢纽。SpreadJS在保留Excel操作习惯基础上,将排产带入浏览器和业务系统,实现在线协同、数据联动、过程可溯、权限可控,助力企业从“Excel手工排程”迈向“可集成、可演进的智能计划应用”。
|
1天前
|
人工智能 自然语言处理 安全
Jev 被拿去做内容护栏之后,企业系统里哪个岗位先坐不住?
Jev引发AI“守门员”新范式:GovTech实测验证其替代传统规则引擎的潜力,适配报销审核、表单校验等高频封闭判断场景。开源路径已通,内网部署可行——活字格让AI工作流编排成为配置项。
|
3天前
|
人工智能 缓存 并行计算
ComfyUI 本地部署 AI 漫剧与 AI 视频流水线:消费级显卡显存优化、角色一致性工程实战
本文聚焦AI漫剧量产痛点,提供基于ComfyUI的本地化落地方案:支持8GB显存卡部署Wan/LTX等FP8量化模型,详解角色一致性控制(IPAdapter+FaceID+LineArt)、显存优化、批量分镜渲染及视频防抖拼接,附完整Python/FFmpeg脚本,助力个人创作者低成本高效生产。
|
3天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型深度拆解:原理解读、实战测评与保姆级落地教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为**System One Model(系统一模型)**,对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
366 1
|
1天前
|
数据挖掘 BI API
BI 报表上线后,维护才刚刚开始
BI报表上线不是终点,而是持续演进的起点。业务指标、数据源、组织架构与用户需求不断变化,企业需建立涵盖变更记录、测试验证、发布审批和版本管理的维护机制,将临时修改升级为可持续治理,让报表真正成为可信、可用、可演进的业务资产。
BI 报表上线后,维护才刚刚开始
|
2天前
|
人工智能 运维 架构师
FDE岗位的生命周期探析:风口之下,长期价值在哪?
本文深度解析FDE(前沿部署工程师)岗位的真实生命周期:它并非短期风口,而是企业数字化深水区的长期刚需。随着低代码普及,基础执行岗将萎缩,但“懂技术+懂行业+能落地+扛结果”的复合能力将持续稀缺。岗位或去标签化,但核心价值穿越周期。
|
17天前
|
缓存 数据可视化 BI
BI 项目上线慢,不是报表做得慢
本文剖析BI项目“Demo快、上线慢”的症结——非报表开发能力不足,而是缺乏标准化发布流程。从资源清单、常见风险、验证节点切入,结合Wyn平台的迁移、API嵌入与环境管理能力,提出覆盖数据源、模型、权限、参数、回滚的工程化交付方法,助力BI真正稳定上线。
BI 项目上线慢,不是报表做得慢
|
19天前
|
数据挖掘 BI API
BI 为什么越来越需要嵌入业务系统?从传统 BI 到 Embedded BI
本文剖析传统BI与业务割裂的痛点,阐述Embedded BI如何通过用户、数据、权限及流程四层融合,将分析能力深度嵌入ERP、CRM等业务系统。结合Wyn实践,展现SSO、SDK等集成方式如何实现原生级嵌入,让数据分析真正成为业务流程的一部分。(239字)
BI 为什么越来越需要嵌入业务系统?从传统 BI 到 Embedded BI

热门文章

最新文章