全局只读逻辑优化讨论

本贴最后更新于 367 天前,其中的信息可能已经时移世异

目前现状

目前的全局只读与单篇只读的逻辑:

  1. 全局只读,单篇解锁:可编辑
  2. 全局只读,单篇锁定:不可编辑
  3. 全局编辑,单篇解锁:可编辑
  4. 全局编辑,单篇锁定:不可编辑

简单点说就是文档根据单篇锁定与否来决定是否可以编辑

但还有一个逻辑:当打开全局只读时,没有操作过锁定解锁的文档会变成锁定的状态,如果是操作过锁定解锁的文档则不会改变

个人感觉这个逻辑有点奇怪,因为这样的话,那这个全局只读的意义就不太大,因为我都特意去操作全局只读了,但还是有些文档是直接可以编辑的,就因为这个文档之前被操作过解锁

解决方案

这里抛砖引玉提两个方案

  1. 全局只读和单篇锁定功能独立,不会联动。全局只读优先级高,单篇锁定优先级低。如果打开了全局只读,那文档不管单篇锁定与否都不可编辑
  2. 文档依旧根据单篇锁定与否来决定是否可以编辑,但是打开全局只读时,所有文档的状态均设置成锁定状态,如果用户对单篇文档解锁,则会自动关闭全局只读

个人倾向于方案 1,这样可以在需要全局只读时单独打开,而且打开关闭也不会影响到单篇文档的锁定与否的状态

相关讨论:Issue #9598 · siyuan-note/siyuan


投票选择是否支持优化逻辑,不单指的上述的方案哈

是否支持

单选 公开 永不结束 10 票
支持
60% 6 票
欠妥
10% 1 票
其他(评论区补充)
20% 2 票
酱油通道
10% 1 票

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22346 引用 • 89408 回帖 • 1 关注
6 操作
temacc0531 在 2023-11-21 12:03:08 更新了该帖
temacc0531 在 2023-11-21 09:45:01 更新了该帖
temacc0531 在 2023-11-21 09:44:16 更新了该帖
temacc0531 在 2023-11-21 09:43:07 更新了该帖 temacc0531 在 2023-11-21 09:42:49 更新了该帖 temacc0531 在 2023-11-21 09:40:55 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 考虑到使用全局只读的两种场景:

    • 临时开启,用完关闭(临时锁定所有文档,确保不可编辑)
    • 长期开启(多用于在移动端查看 / 只需要特定的某些文档可编辑)

    我提出第 3 种方案:

    • 在关闭全局只读时记忆单篇文档的锁定状态;在开启全局只读时改变的状态不记忆
    • 开启全局只读时默认将所有文档锁定,但保留在开启全局只读前的状态记忆,在关闭全局只读后按照记忆恢复原先的状态
    1 回复
    1 操作
    JeffreyChen 在 2023-11-15 17:00:16 更新了该回帖
  • temacc0531
    作者

    你这个效果类似方案 1,就是逻辑有点复杂 😂

    1 回复
  • 因为前 2 个方案都跟我实际使用方式冲突,目前的逻辑感觉又不够完美,所以只好自己提方案了 trollface

  • m7641

    当前的全局只读开关是一个默认值,如果文档已经有 readonly 字段则覆盖全局默认值,没有则按默认值添加进去,也就是文档只读属性优先级高于全局只读。

    只需要改变下优先级即可:

    1. 文档打开状态下,文档的 readonly 字段优先级最高,点了锁定就不能编辑。
    2. 文档关闭状态下,以全局默认值优先级最高,也就是关闭文档就重置文档 readonly 字段为全局值。
    1 回复
  • temacc0531
    作者

    我大概总结一下你的方案,你看看对不对,这里称为方案 4

    1. 文档只根据单篇锁定与否来决定是否可以编辑,全局只读则是作为单篇锁定与否的默认值
    2. 当打开全局只读时,新建文档默认锁定,文档可以手动操作锁定解锁,关闭后恢复默认值锁定
    3. 当关闭全局只读时,新建文档默认解锁,文档可以手动操作锁定解锁,关闭后恢复默认值解锁

    第 3 点有点问题,用户都对单篇锁定了,如果关闭又恢复解锁,那也就是在关闭全局只读的情况下,单篇锁定只有在用户开着文档的时候才会短暂生效,这种场景下的单篇锁定基本就没有用处了。那如果改成这样

    1. 当关闭全局只读时,新建文档默认解锁,文档可以手动操作锁定解锁,关闭后单篇状态不变

    这样用户关闭全局只读后就和正常使用逻辑一致了,如果采用这个方案的话,那把【全局只读】改名叫【默认编辑状态】可能更贴切一些

    这个方案和方案 2 有同样的问题,就是如果打开全局只读就会影响到单篇的状态。但有些用户打开全局只读只是想要暂时把全局设置不能编辑,而不想动到之前设置好的单篇状态,就像前面 a 老哥说的那样

    1 操作
    temacc0531 在 2023-11-16 12:31:56 更新了该回帖
  • 个人感觉全局只读更多是为了临时控制编辑权限,所以开启后,默认是要覆盖所有文档的编辑权限,有需要的单篇再打开即可。而关闭全局只读后,则恢复原来文档的编辑权限。假设原来的文档权限是只读,开启了全局只读还是只读,关闭了全局只读也是只读,如果原来的权限是编辑,开启了全局只读是只读,关闭了全局只读是编辑,如果原来的权限是编辑,开启了全局只读是只读,然后又手工改了权限为编辑,关闭里全局只读也还是编辑。

    综上,全局只读和文档权限分开,恢复的时候根据文档编辑状态。

    1 回复
  • temacc0531
    作者

    是的,这个就是方案 1 了,就是正常情况下用户应该是只使用单篇锁定解锁,全局只读是用在临时全局控制

  • zxkmm 2 赞同

    个人觉得最好的方案:

    启用全局只读时:

    • 所有内容锁上,想要编辑就按 锁头 按钮解锁,解锁后可以编辑该篇内容,但是这个 可编辑与否 属性不用记录到文档的属性中。所以关闭文档(或者关闭 app)再打开,还是上锁的,想要编辑重新按 锁头 解锁。
    • 新建文档属性默认解锁,但是前端编辑限制为符合上一条描述。

    关闭全局只读:

    • 上锁与否根据各文档自身的属性决定。
    • 新建文档属性默认解锁。

    TLDR:全局只读可以作为编辑器的锁,而且这个锁可以通过锁头按钮临时解除一次(不要把改动写到文档的属性),关闭文档后重新上全局锁。


    设计图:

    image.png

    更进:Issue #9598 · siyuan-note/siyuan

    1 回复
    2 操作
    zxkmm 在 2023-11-21 10:22:05 更新了该回帖
    zxkmm 在 2023-11-20 17:13:43 更新了该回帖
  • Yylicon 1 赞同

    我顶一下,感觉现在的逻辑确实有点复杂了,我的场景是电脑端全局编辑,但是手机端就不一样了,手机端需要全局只读,临时编辑(刷新文档后仍是只读)

  • zxkmm 2 评论

    类似于这样的:image.png

    对的就是这样的逻辑,临时解锁,块折叠 callout 其实也是这样
    Yylicon 1 赞同
    @Yylicon 我也觉得这样合理一些。建议在这里也跟进一下。Issue #9598 · siyuan-note/siyuan
    zxkmm
  • temacc0531 2 评论
    作者

    你这个方案我们称之为方案 5,应该可以说是方案 1 的优化版,我提方案 1 主要是从实现复杂程度考虑,所以简单分为两个优先级

    另外,投票其实是投是否支持优化逻辑的意思,没限制说是我提的方案 😂

    1 操作
    temacc0531 在 2023-11-21 09:47:18 更新了该回帖
    原来如此, 谢谢您的说明!
    zxkmm
    已修改投票
    zxkmm
请输入回帖内容 ...

推荐标签 标签

  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 22 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 742 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 2 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 62 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    190 引用 • 1057 回帖
  • 安全

    安全永远都不是一个小问题。

    199 引用 • 816 回帖 • 1 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 1 关注
  • 电影

    这是一个不能说的秘密。

    120 引用 • 599 回帖
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 531 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    47 引用 • 25 回帖 • 1 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 99 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 362 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 471 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 18 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖 • 1 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 328 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    107 引用 • 295 回帖
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 384 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    32 引用 • 130 回帖 • 2 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 63 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖