引言

在现代前端开发中,数据表格的应用极为广泛,而分权限管理在许多业务场景下是必不可少的功能。例如在表格类填报需求中,不同等级的登录用户能填报的区域有所不同。SpreadJS 作为一款强大的前端表格控件,为实现这样的分权限管理提供了有效的解决方案。本文将详细介绍如何借助前端技术栈,利用 SpreadJS 实现表格的分权限管理。

正文

SpreadJS 简介

SpreadJS 是一款类 Excel 的前端表格控件,它的操作及功能与 Excel 高度类似,但又完全脱离对 Office 的依赖。将 SpreadJS 集成到前端项目并部署发布后,用户只需在 PC 上安装满足 H5 标准的浏览器(如 Chrome、Firefox、Edge 等),即可在浏览器端打开使用,这为前端开发提供了极大的便利 ^^。

选择 SpreadJS 实现分权限管理的原因

选择 SpreadJS 来做权限编辑的底层表格组件,主要是受到 Excel 中表单保护机制的启发。在 Excel 里,结合单元格锁定状态和工作表的保护状态,可以控制单元格是否可以编辑,这种可编辑控制的最小粒度能达到单元格级别。而 SpreadJS 具备类似的表单保护功能,为实现分权限管理提供了基础。

借助 SpreadJS 实现分权限管理的具体方案

编辑权限控制分类

SpreadJS 实现编辑控制的核心 API 主要有单元格锁定及表单保护。编辑权限控制整体可分为以下三类:

  1. 整个工作表不可编辑

    一个 Excel 文件称为一个工作簿,一个工作簿包含多个工作表。默认状态下,工作表的锁定状态为 true。若要设置整个工作表不可编辑,只需执行工作表保护相关代码。示例代码如下:
let designer = GC.Spread.Sheets.Designer.findControl(document.getElementById('gc-designer-container'));
let spread = designer.getWorkbook();
let sheet = spread.getActiveSheet();
sheet.options.isProtected = true;

执行上述代码后,Sheet1 中所有单元格将不能再编辑。若设置后单元格仍可编辑,可能是原 Excel 文件中默认单元格的锁定状态被修改成 false,此时可通过代码或右键设置单元格格式→保护来查看单元格的锁定状态。若需要整个工作簿都不可编辑,只需循环设置工作簿中每个工作表的保护状态即可。

  1. 部分单元格可以编辑

    不可编辑的原则是单元格锁定和表单保护同时生效。若要让部分单元格可编辑,只需将对应单元格的锁定状态设置为 false。示例代码如下:
let sheet = spread.getActiveSheet();
sheet.getRange(0, 0, 6, 3).locked(false);
sheet.options.isProtected = true;

通过上述代码,可实现设置 A1:C6 单元格可以编辑,其他单元格不能编辑的需求。若不生效,需检查其他单元格的锁定状态是否被修改为 false,若是则需将其锁定状态变为 true。

  1. 部分单元格不能编辑

    默认单元格锁定状态为 true,若只需少量单元格不能编辑,建议先将工作表的默认单元格锁定状态改为 false,之后设置部分不能编辑的单元格锁定状态为 true。示例代码如下:
let sheet = spread.getActiveSheet();
let defaultStyle = sheet.getDefaultStyle();
defaultStyle.locked = false;
sheet.setDefaultStyle(defaultStyle);
let range = sheet.getRange(0, 0, 5, 5);
range.locked(true);
sheet.options.isProtected = true;

通过上述代码,可实现橙色区域可以编辑,其他区域不能编辑的需求。若需要设置多个区域可以编辑,可继续调用区域锁定(locked)相关的 API。更详细的 UI 实现设置及代码可参考 SpreadJS 官方论坛相关教程链接。

将用户权限与单元格打通

在了解单元格编辑控制后,接下来要将用户权限与单元格打通,实现基于登录用户权限的编辑控制。SpreadJS 支持单元格标签(Tag)属性,可用于记录一些和单元格相关的额外不需要展示的信息,我们可以将单元格编辑权限的相关信息记录在单元格 Tag 中。整体实现思路如下:

  1. 预先设置权限信息:将可以编辑的用户以字符串的形式写入单元格的 Tag 中。例如,单元格 tag 为 'user1',代表当前单元格一级用户可以编辑;若单元格 tag 为 'user1,user2',则代表当前单元格一级用户与二级用户均可编辑。
  2. 遍历查询权限信息:遍历查询当前单元格 Tag 中是否包含用户等级标记信息,若包含,表明当前用户可以编辑此单元格,将单元格对应的锁定状态变为 false。

结论

借助前端技术栈和 SpreadJS,我们可以有效地实现表格的分权限管理。SpreadJS 的表单保护功能和单元格标签属性为分权限管理提供了强大的支持,通过合理运用这些功能和属性,能够满足不同业务场景下的分权限管理需求。本文提供了权限编辑的一种参考实现思路,开发者可根据实际情况进行调整和优化。同时,随着前端技术的不断发展,SpreadJS 也将在更多的场景中发挥重要作用,为前端开发带来更多的可能性。

SpreadJS

前端技术栈加持:用 SpreadJS 实现分权限管理的更多相关文章

  1. 20151028整理罗列某种开发所包括对技术(技术栈),“较为全面”地表述各种技术大系的图表:系统开发技术栈图、Web前端技术栈图、数据库技术栈图、.NET技术栈图

    ———————————— 我的软件开发生涯 (10年开发经验总结和爆栈人生) 爆栈人生 现在流行说全栈.每种开发都有其相关的技术.您是否觉得难以罗列某种开发所包括对技术(技术栈)呢?   您是否想过: ...

  2. 2019年一半已过,这些大前端技术你都GET了吗?- 下篇

    在上一篇文章中已经介绍了大前端关于状态管理.UI组件.小程序.跨平台和框架层的内容.在本文中,我会继续介绍编程语言.工程化.监控.测试和服务端,同时也会对下半年大前端可以关注的部分进行展望. 结合个人 ...

  3. 使用前端技术和MySQL+PHP制作自己的一个个人博客网站

    源代码地址:https://github.com/YauCheun/BlogCode 我的博客网站地址:http://www.yublog.fun/ 制作前景: 想拥有一个自己独自开发的一个小型博客网 ...

  4. jhipster技术栈研究

    背景: 公司新的微服务项目都用jhipster脚手架来开发,这篇博客是jhipster里面涉及到技术的汇总目录 一.官方文档中涉及到的技术栈 前端技术栈 Angular / React / Vue R ...

  5. SaaS技术栈有多复杂?

    [特别声明:本文基于Tools and Services I Use to Run My SaaS进行修改.] 软件SaaS化由于需要考量架构的各个方面,所以需要的技术栈非常全面. 以一个客户管理Sa ...

  6. SimpleNVR安防监控RTSP/FLV/HLS直播流服务如何分权限添加用户指定通道观看

    背景分析 随着SimpleNVR的用户越来越多,很多客户反馈给了我们很宝贵的简易以及用户体验.在此非常感谢大家对我们的支持.其中很多客户不想把所有的视频直播展现出来,想分权限添加新用户,指定通道让其观 ...

  7. 用“MEAN”技术栈开发web应用(一)AngularJs前端架构

    前言 不知何时突然冒出“MEAN技术栈”这个新词,听起来很牛逼的样子,其实就是我们已经熟悉了的近两年在前端比较流行的技术,mongodb.express.angularjs.nodejs,由于这几项技 ...

  8. Web前端开发大系概览 (前端开发技术栈)

    前言 互联网建立50多年了,网站开发技术日新月异,但web前端始终离不开浏览器,最终还是HTML+JavaScript+CSS这3个核心,围绕这3个核心而开发出来大量技术框架/解决方案. 我从2000 ...

  9. 基于.Net进行前端开发的技术栈发展路线(二)

    前言 上一篇<我的技能树>文章分享了我的技能成长过程,还未完成,今天继续跟大家分享. 01 我的技能树 我的当前的技能树: 其中,标注为黄色旗帜的是基本掌握,标注为红色旗帜的为使用熟练.未 ...

  10. 基于.Net进行前端开发的技术栈发展路线(一)

    前言 今天想讲讲的是我的技术树.我最初是做CS开发的,第一阶段的技术经历是以Powerbuilder来做CS开发,第二阶段开始基于C#做winform开发,眼看前端开发越来越流行,需要更广泛的技术栈势 ...

随机推荐

  1. 【python-数据分析】pandas数据提取

    import pandas as pd 1. 直接索引 df = pd.DataFrame({'AdmissionDate': ['2021-01-25','2021-01-22','2021-01- ...

  2. 《机器人SLAM导航核心技术与实战》先导课:课程大纲

    <机器人SLAM导航核心技术与实战>先导课:课程大纲 视频讲解 [先导课]1.课程大纲-视频讲解 [先导课]1.1.课程大纲-学习思维导图(上)-视频讲解 [先导课]1.2.课程大纲-学习 ...

  3. java学习-8【EnumMap】

    EnumMap和EnumSet几乎是一样的,区别时EnumMap的key时Enum. public enum Types { RED,GREEN,BLACK,YELLO } @Test public ...

  4. FastAPI依赖注入作用域与生命周期控制

    title: FastAPI依赖注入作用域与生命周期控制 date: 2025/04/08 00:02:10 updated: 2025/04/08 00:02:10 author: cmdragon ...

  5. 搜索算法1——聊聊dfs与回溯

    搜索算法1--聊聊dfs与回溯 目录 1.dfs 的概念 $\ \ \ $1.1 dfs 的概念 2.dfs 的做法 $\ \ \ $2.1 为什么要用 dfs $\ \ \ $2.2 dfs 如何实 ...

  6. 🎯Vercel-从零到上线的云端部署神器

    简介 Vercel是一个专注于前端和全栈应用部署的云端平台,由Zeit公司开发.它以零配置部署.全球CDN加速和对主流框架的深度支持为核心优势,成为开发者快速上线项目的首选工具.无论是个人博客.企业官 ...

  7. 🧠 Model Context Protocol(MCP)详解:AI 编程新时代的“USB 接口

    目标读者:具备一定编程基础,但尚未涉足 AI 编程的开发者 本文目的:帮助你理解 MCP 的核心概念.技术优势.运作机制,并指导你如何使用 MCP 构建智能体项目. 什么是 MCP? MCP,全称 M ...

  8. symfony5初体验:doctrine、配置、文件上传、jwt登录/auth等常见问题

    之前用symfony3.4,最近上手symfony5发现加入了很多新特性,搭配easyadminBundle.api-platform这些用起来感觉简直如有神助,瞬间爱了. 不过api-platfor ...

  9. TCP连接(Netty)

    启动类增加 public static void main(String[] args) { SpringApplication application = new SpringApplication ...

  10. <HarmonyOS第一课07>从网络获取数据

    视频链接: https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717497918284399?ha_sou ...