这里是文章模块栏目内容页
Nextcloud云盘源码分析:文件共享前端实现和修改共享权限的方法

nextcloud云盘文件共享 是什么?它的功能和文件分享链接的区别在哪里?


文件共享是把文件共享给某个用户,被共享的用户文件列表内直接列出文件,就像文件被存放在自己的云盘空间上,如果得到共享人的权限授权,有权限对文件进行删除和修改等拥有此文件的管理权限,但是这个被共享的文件,实际物理存储只有一份,即它存在于共享者的云盘空间内。如果被共享用户有权限执行删除操作,那么文件将被从物理空间中删除。


分享链接,是一个url链接,被共享人得到此url链接,需要点开链接所打开的页面才能查看文件或者文件夹,同样也可以被分享人授予各种管理权限,删除修改和上传文件等。但是这些文件并不在查看此url链接的用户文件列表中。

分享链接,用于站外分享特别方便,即如果要把一个文件分享给非云盘用户,可以用这个功能。


共享的文件列表出来,这些在源码里面是如何具体实现的呢?下面就大概的找一下线索,希望能帮助到有修改需求的朋友。


关于这个 是在 /lib/private/Share20/Manager.php

getShareWith()

/lib/private/Share20/DefaultShareProvider.php 

共同查询出 接收到的分享给它的文件

增加全站分享,通过添加一个会员组 


修改/lib/private/Share20/DefaultShareProvider.php 文件  850 行 和 818行 代码

 $groups[] =  'AshareGroup';

创建一个会员组用于所有会员查询


/app/files_sharing


/core/js/ShareDialogShareeListView.js

//OC.showMenu(null, $menu); 

//OC.showMenu(null, this.$(liSelector + ' .sharingOptionsGroup .popovermenu'));

这两行被注释,主要是禁止了转发文件 已经转发列表的右侧三点 菜单切换显示;


首先需要获取 文件的 filemode参数


查找detailsview 如何初始化到 filelist 中,

要模仿这个 数据流向,把 detailtabview 对象渲染出来。


在 files_sharing的js文件夹share.js里面有 注册一个sharetabview 组件;

这个组件是显示共享的操作。


需要构建一个 detailview组件,简化之前的组件显示多个通过filelist。attach插件功能加载进来的tab组件功能,用来指加载sharetabview

选项卡的内容。


构建的 ocdialog 不能每次都烧毁,这样之前初始化绑定的事件都已经消失;

需要重新构造一个类似dialog的浮动界面,进行隐藏和不显示;


查看app-slider 是在哪里插入初始化,并进行隐藏和显示的;


如何设置共享的文件编辑权限?

找到/core/js/shareitemmodel.js 里面的方法 editPermissionState;

把这个属性获取的permissions的 属性值checked 返回''空;