引言

在现代前端开发中,数据表格的应用极为广泛,而分权限管理在许多业务场景下是必不可少的功能。例如在表格类填报需求中,不同等级的登录用户能填报的区域有所不同。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. [源码系列:手写spring] IOC第五节:Bean注入Bean

    主要内容 添加BeanReference类,包装一个bean对另一个bean的引用.如beanA引用beanB,那么在实例化beanA时,如果propertyValue.value是BeanRefer ...

  2. arthas安装和简单使用

    介绍 Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load.内存.gc.线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参.异常,监测方法执 ...

  3. python实例:导入会员数据后,读取数据文件,检查导入正确性(整列取excel值、合并列、response取值)

    场景描述:某系统新上线,老系统的会员数据要导入新系统中,包含手机号,上级信息和会员余额.有1万多条数据,手工对比过于繁琐,用python自动化处理 思路:系统导入数据后,脚本读取文件,先把会员数据取出 ...

  4. 在 Go 语言中,构造一个并发安全的 map 集合

    Map 集合是 Go 中提供的一个 KV 结构的数据类型,对它的操作在实际的开发中应该是非常多的,不过它不是一个线程安全的. 1 .Map 不是线程安全的 编写下面的测试代码: func TestUn ...

  5. GeoIP库商业版调研-支持IPV6

    背景 因需要支持ipv6网络,目前所使用的GeoIP库无法解析或者很少量的能解析出IPV6的IP地址位置信息,所以需要更新最新的GeoIP库文件.目的配置在Nginx或者服务直接调用使用,从而获取城市 ...

  6. Vue ElementUI 树表格

    树表格做懒加载-点击小箭头走接口 children为[]则使用hasChildren的true/false来判断是否有子节点,另,如果要做点击小箭头走接口必须加lazy及load <el-tab ...

  7. BURP APP HTTPS抓包xposed+justtrustme工具篇

    APP HTTPS抓包 当APP是HTTPS时,则单纯的使用Burpsuite无法抓取数据包,原因是APP启用了SSL Pinning(又叫做"SSL证书绑定"). 1.下载夜神模 ...

  8. GPUStack v0.5:模型Catalog、图生图功能上线,多维优化全面提升产品能力与使用体验

    GPUStack 是一个专为运行 AI 模型设计的开源 GPU 集群管理器,致力于支持基于任何品牌的异构 GPU 构建统一管理的算力集群.无论这些 GPU 运行在 Apple Mac.Windows ...

  9. HarmonyOS运动开发:如何集成百度地图SDK、运动跟随与运动公里数记录

    前言 在开发运动类应用时,集成地图功能以及实时记录运动轨迹和公里数是核心需求之一.本文将详细介绍如何在 HarmonyOS 应用中集成百度地图 SDK,实现运动跟随以及运动公里数的记录. 一.集成百度 ...

  10. pod数据持久化-pv与pvc资源及动态存储StorageClass

    一.pc与pvc的概念 在传统的存储卷挂载,比如说nfs,它虽然能够实现我们大多数的生产场景,但是,耦合性比较高: 举例:假设,我们要将集群从"阿里云"迁移到我们私有云服务器上,并 ...