Nextcloud

ownCloud/Nextcloud文件访问控制(Files Access Control)

事实上这是一个插件(APP),也是ownCloud/Nextcloud的一项重要功能:文件访问控制。文件访问控制APP可以提供丰富强大的访问管理功能,从单文件权限到组文件,再到IP地址屏蔽,可以引用访问的时间、文件类型、用户、组等因素。

演示环境:Nextcloud 12 (本来想用ownCloudX,结果发现ownCloud里没这个插件,幸好Docker把ownCloud切换成Nextcloud只需要两行命令+几秒钟)

安装

访问Nextcloud实例->应用->Files->File access control->启用,即可启用插件。(顺便留意一下旁边的Files automated tagging,一会儿我们将用到它)。

完成启用后,到管理(在Nextcloud13和ownCloudX中应为“设置”)->文件访问控制即可开始。

可选的过滤规则

文件访问控制提供了以下几种过滤规则:

  • 文件系统标签(这个正确的翻译是“文件协同标签”,与“管理”中的选项一致,但插件上显示的是是“文件系统标签”):除了文件本身,这个文件的父目录也需要被打上标签。[infobox]文件权限控制中作为限定规则的标签应当是强制性的标签,否则用户可以自行把标签去掉以访问这个文件。最好的方法是使用自动标记文件的功能(我会在后文中简要说明)[/infobox]
  • 文件MIME类型:文件的MIME类型,例如text/plain
  • 文件大小:文件体积的大小(仅限制要上传的文件)
  • 远程请求地址:访问者的IP地址(IPv4或IPv6)
  • 请求时间:限制用户访问文件的时间段
  • 请求URL:阻止用户访问某一URL(这儿的URL是指文件的URL,而不是用户正在访问的URL)
  • 请求用户代理:用户所用的浏览器或客户端(Nextcloud桌面客户端,Android和iOS客户端可用作预配置选项。)
  • 用户组成员资格:用户是否是给定组的成员

限制的动作

当一个用户被禁止访问一个文件(夹),他将无法进行以下操作:

  • 创建/上传文件
  • 修改文件
  • 删除文件
  • 下载文件
  • 使用客户端(桌面客户端或手机客户端)同步文件

文件管理控制的规则组是对用户的限制,只有当用户符合规则组中所有子规则时,这个用户才会受到限制,

示例

点击“添加规则组”以添加一个规则组,先给规则组起个名吧,比如“Example”。

规则的设置都很简单,我这儿展示几个稍复杂些的:

文件MIME类型控制

在左侧第一个下拉菜单中选择“文件MIME类型”:

第二个下拉菜单中选择对该规则的动作:是、不是、匹配、不匹配:后面的内容填写文件的MIME类型。

一个完整的子规则如下:

上图中的规则会对所有文件MIME类型为images/png(也就是png格式的图片,注意文件后缀名不等于MIME类型),那么所有png图片都将被予以限制(参见上文的限制内容)。

“匹配”、“不匹配”指的是对正则表达式的匹配,你可以使用正则表达式进行配置,例如:

上图中的正则表达式/^image\/(jpeg|png|bmp)$/i 匹配MIME类型为jpeg、png、bmp的文件,这些格式的文件都将受到控制。

请求时间

对所有的png文件都予以限制不是个常见的需求,因为这个影响的所有用户,包括管理员。所以我们可以

缩小限制范围,比如再加上时间限制:

上面这个规则限制了用户只能在北京时间(Asia/Shanghai)9:00到18:00操作文件,如果将“之间”改为“不在之间”,那么用户在9:00到18:00将无法操作文件。

看完这两个例子,你应该意识到:这些规则都是全局的,影响所有文件和所有用户,所以往往需要添加足够多且精确的规则

使用标签进行访问控制

ownCloud/Nextcloud有一个功能是“协作标签”,其实就是文件(夹)的标签,例如:

我们可以利用这些标签对文件进行管理,比如我要对所有带有“MP4”标签的文件进行限制,可以这样写:

效果如下图,已经无法对标记为MP4的文件进行各种操作了:

即使是仅有的“下载”,当你点击它时,会出现这样的页面:

但是这样存在一个巨大的缺陷,即前文所提到的用户可以自行去掉便签,接触对文件的限制。那么这是我们可以用Files automated tagging插件,这个插件可以自动为文件打上标签,并且可以使标签无法被移除。

到应用页面启用这个插件,然后到管理->工作流里找到“文件自动设置标记",,可以看到这个插件的机制的文件访问控制插件一样,是使用规则组进行配置,下面是一个给所有JPEG类型的文件打上“JPG”标签的规则(新标签可以在上方的“协同标签”中添加):

然后在文件访问控制中添加如下规则,就可以实现对特定标签的持续控制:

请求远程地址

该插件还提供了针对用户IP拒绝访问的功能,即常说的封IP,这个还是挺有用的。格式为IP+网段,例如:

 

上传大小限制

总结

文件访问控制提供了可以自由组合的规则,能够充分适应管理者的需求,有条理地管理Nextcloud上的文件和用户行为。

(0)

本文由 橙叶博客 作者:FrankGreg 发表,转载请注明来源!

热评文章

评论:

5 条评论,访客:5 条,博主:0 条
  1. leo
    leo发布于: 

    请教一下没有没批量更新标签的工具或是插件

    • FrankGreg
      FrankGreg发布于: 

      文中提到的Files automated tagging就可以~

  2. FENG GONGQIAN
    FENG GONGQIAN发布于: 

    好的,非常感谢~~~我尝试用你方法试试。搞定的话,告诉你一声。^_^

  3. ovencloud
    ovencloud发布于: 

    你好,请教一个问题~~~ 我在使用时在线播放会遇到视频无字幕的问题。然而我不会修改nextcloud的html5视频播放器的源码,实现可以挂载字幕的问题。例如网页播放器常见的webvtt格式的字幕~请问我该如何修改???小白不懂,只能看懂一点html5···

    • FrankGreg
      FrankGreg发布于: 

      看了一下源码,发现几乎纯js写的,有点头痛……
      可以尝试在js/viewer.js里第16行左右添加字幕标签.
      但是变量什么的都在videojs/video.js里,很复杂,好像是用正则匹配得到的视频地址。
      提供个思路:使用正则表达式匹配到获得字幕的地址,然后使用标签播放字幕。在viewer.js里大概是这样的:

      1. playerTemplate : ‘<video id=“my_video_1” class=“video-js vjs-sublime-skin” controls preload=“auto” width=“100%” height=“100%” poster=“‘+OC.filePath(‘files_videoplayer’, ”, ‘img’)+’/poster.png” data-setup=\'{“techOrder”: [“html5”]}\’>’ +  
      2. ‘<source type=“%type%” src=“%src%” />’ +  
      3. ‘<track label=“字幕名” kind=“subtitles” srclang=“语言” src=“字幕.vtt”>  
      4. ‘</video>’,  

      其余的我就爱莫能助了,因为我对js也不熟……

发表评论

电子邮件地址不会被公开。 必填项已用*标注