Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

增加编辑保护, 如果设置,需要密码才能编辑 #7526

Closed
wants to merge 2 commits into from

Conversation

iamqiz
Copy link
Contributor

@iamqiz iamqiz commented Feb 28, 2023

支持设置编辑保护密码,

  • 如果设置了密码,

    • 从只读模式进入编辑模式需要密码
    • 通过浏览器伺服打开思源会自动进入只读模式,输入密码才能编辑
    • 修改或移除密码也需要先输入密码, 设置空密码可关闭编辑保护
  • 密码保存在本地, 工作空间目录\data\storage\local.json 文件里,名为editProtectPassword

  • 使用场景

    • 通过nas分享思源笔记时, 管理者设置密码可防止浏览者修改
  • 使用方法:
    Snipaste_2023-02-28_23-45-00

  • Please commit to the dev branch 请提交到 dev 开发分支
  • For contributing new features, please supplement and improve the corresponding user guide documents 对于贡献新特性,请补充完善对应用户指南文档
  • For bug fixes, please describe the problem and solution via code comments 对于修复缺陷,请通过代码注释描述问题和解决方案
  • For text improvements (such as typos and wording adjustments), please submit directly 对于文案改进(比如错别字措辞调整)请直接提交

Sorry, something went wrong.

@Soltus
Copy link
Contributor

Soltus commented Feb 28, 2023

使用伺服测试,存在一个逻辑问题:开启编辑保护后,app端切换只读/编辑模式,伺服端只读/编辑图标不会切换,但实际模式已经发生变化。
改进建议:伺服端不应当受app端模式切换影响

@zxhd863943427
Copy link
Contributor

从功能上setReadonly2算是setReadonly的包装,这个命名太模糊了,建议改成setReadonlyCheck

@iamqiz
Copy link
Contributor Author

iamqiz commented Feb 28, 2023

使用伺服测试,存在一个逻辑问题:开启编辑保护后,app端切换只读/编辑模式,伺服端只读/编辑图标不会切换,但实际模式已经发生变化。 改进建议:伺服端不应当受app端模式切换影响

app和网页的只读/编辑模式是独立的, app设置密码后,模式不变, 但是网页打开思源后会自动进入只读模式,需要密码才能编辑 ;
如果网页端本来是编辑模式, app端重启后, 网页会断开,然后重连,重连之后自动进入只读模式;
理想的是,管理者设置密码后, 网页端立即进入只读模式, 而不需要重启 ,这个暂时还不知道怎么搞

ps: 网页端也可以设置密码, 然后app打开后自动进入只读

@Soltus
Copy link
Contributor

Soltus commented Feb 28, 2023

使用伺服测试,存在一个逻辑问题:开启编辑保护后,app端切换只读/编辑模式,伺服端只读/编辑图标不会切换,但实际模式已经发生变化。 改进建议:伺服端不应当受app端模式切换影响

app和网页的只读/编辑模式是独立的, app设置密码后,模式不变, 但是网页打开思源后会自动进入只读模式,需要密码才能编辑 ; 如果网页端本来是编辑模式, app端重启后, 网页会断开,然后重连,重连之后自动进入只读模式; 理想的是,管理者设置密码后, 网页端立即进入只读模式, 而不需要重启 ,这个暂时还不知道怎么搞

实测并没有独立,任意端切换模式都会立即影响另一端

@iamqiz
Copy link
Contributor Author

iamqiz commented Feb 28, 2023

@Soltus
我指的独立是,设置密码后, 网页只读时,app可以进入编辑模式, 网页进入编辑时,app也可以进入只读模式;
你的意思是app设置密码后, 网页端能无需密码自由切换只读和编辑吧? 这样管理者就没法控制浏览者能否编辑了, 不是我开头提到的应用场景了

@Soltus
Copy link
Contributor

Soltus commented Feb 28, 2023

@Soltus 我指的独立是,设置密码后, 网页只读时,app可以进入编辑模式, 网页进入编辑时,app也可以进入只读模式; 你的意思是app设置密码后, 网页端能无需密码自由切换只读和编辑吧? 这样管理者就没法控制浏览者能否编辑了, 不是我开头提到的应用场景了

彼此影响的后果是冲突,如果需要控制伺服端也不应当通过app端切换编辑模式这一方式。如果无法解决这一冲突,你应该使用 if browser 限定在浏览器中使用锁定,app端只配置密码而不锁定

@iamqiz
Copy link
Contributor Author

iamqiz commented Feb 28, 2023

@Soltus 我指的独立是,设置密码后, 网页只读时,app可以进入编辑模式, 网页进入编辑时,app也可以进入只读模式; 你的意思是app设置密码后, 网页端能无需密码自由切换只读和编辑吧? 这样管理者就没法控制浏览者能否编辑了, 不是我开头提到的应用场景了

彼此影响的后果是冲突,如果需要控制伺服端也不应当通过app端切换编辑模式这一方式。如果无法解决这一冲突,你应该使用 if browser 限定在浏览器中使用锁定,app端只配置密码而不锁定

docker+NAS时, 管理者也是通过网页访问思源的吧, 这个编辑保护也可以从网页端来设置, 从而影响其他网页
app不锁定,这个可以有, 我改一下

@Soltus
Copy link
Contributor

Soltus commented Feb 28, 2023

这个编辑保护也可以从网页端来设置

网页端模式切换应当仅作用于当前会话。
考虑以下扩展需求:

  1. 网页端使用请求而不是密码校验。在此基础上,服务端可以一键锁死,所有网页端无法申请编辑。
  2. 网页端仍具备相当高的权限,仅保护编辑权限显然无法满足实际的分享需求。为了不削弱app端伺服能力,分享应当另起服务和界面。

@88250
Copy link
Member

88250 commented Mar 1, 2023

通过nas分享思源笔记时, 管理者设置密码可防止浏览者修改

从使用场景上来看,只是改动文档编辑器的编辑模式无法解决问题的,因为这里只控制编辑器,不控制其他地方,浏览者依然可以创建、删除文档或者进行其他一些写入数据的操作。

要正确实现该场景目前有两个方案:

  1. 通过独立的内核进程伺服另一个工作空间,中间使用云端同步打通数据,启动只读模式的内核进行伺服
  2. 在现有内核基础上实现用户和权限管理

方案 1 目前已经能够工作,方案 2 需要较大工作量的开发。


感谢楼主花时间精力贡献,但是我们不能合并这个 PR,见谅。

@88250 88250 closed this Mar 1, 2023
@zxhd863943427
Copy link
Contributor

测试了一下,确实,编辑器只读模式只能限制编辑区,对于删除文档这种破坏操作也是限制不了的……那这个功能虽然还有价值,但意义不大了。

@iamqiz
Copy link
Contributor Author

iamqiz commented Mar 1, 2023

@88250 在前端对一些会修改数据的操作进行屏蔽不就可以只读了吗? 为啥还需要单独开一个内核?
比如用户点击删除按钮,前端判断用户没有权限(比如没有通过密码),就直接return , 这样不行吗?
或者前端向内核发送api请求时,如果是未授权,则内核直接return,不行吗?

方案1需要联网,这个缺点有点大..

@iamqiz
Copy link
Contributor Author

iamqiz commented Mar 1, 2023

@88250 另外方案1能实现 管理者编辑文档的同时, 浏览者能实时看到修改的内容吗?

@Soltus
Copy link
Contributor

Soltus commented Mar 1, 2023

后续可能在 局域网分享文档 #261 实现

@88250
Copy link
Member

88250 commented Mar 1, 2023

@iamqiz 那就是方案二了,需要单独管理这些权限;无法实时同步。

@iamqiz
Copy link
Contributor Author

iamqiz commented Mar 1, 2023

@88250 我感觉把一些常用的能修改数据的操作加上权限,只读功能基本就能发布给用户使用了;对于剩下那些不常用的,后面慢慢再加上

@luo-chuan
Copy link

能否增加一个只读端口呢?
https://ld246.com/article/1677729145741

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants