灰儿 发表于 2022-9-19 08:37:29

Veno-File-Manager (VFM4)云盘,让编辑用户无权移动删除只读目录

Veno-File-Manager (VFM4)云盘,让编辑用户无权移动、更名、删除用户只读目录

1.修改前端显示UI代码,让游客和登录用户显示公共目录(public_dirs)、用户只读目录(user_read_dirs)和根目录(starting_dir)中的文件
打开根目录 vfm-admin/template/list-files.php 文件,把条件判断语句改为如下格式:if ($gateKeeper->isAccessAllowed()){
if( $location->editAllowed()
    || $location->guestReadtAllowed()
    || $location->userReadtAllowed() && $gateKeeper->isUserLoggedIn()
    || $location->getCleanPath() ==="") {
    if ($gateKeeper->isAllowed('view_enable')) {

列表显示文件代码 }
显示上传文件功能区块代码 }
}
存在问题,当以上代码中添加 guestReadtAllowed()、userReadtAllowed() 、getCleanPath() ==="" 三条判断语句后,会出现一个新的bug,即编辑(editor)用户打开首页、游客公共目录(public_dirs)或用户只读公共目录(user_read_dirs),一直显示加载状态,打不开网页。


解决方法:
打开根目录 vfm-admin/include/load-js.php文件,查找与更名 (rename_enable) 相关代码,把显示条件判断语句改为如下格式:
单选操作(右侧):更名
if ($gateKeeper->isAllowed('rename_enable') && $location->editAllowed())
解决浏览公共目录(user_read_dirs)下文件时时,“多选操作”菜单中仍显示移动、复制和删除按钮的问题:



大概在65行左右,添加条件判断语句,使“多选操作”菜单中不显示移动、复制和删除按钮,改后代码如下:
if ($gateKeeper->isAllowed('move_enable') && $location->checkUserDir()) { ?>
   
      getString("move"); ?>
   
    }
if ($gateKeeper->isAllowed('copy_enable') && $location->checkUserDir()) { ?>
   
      getString("copy"); ?>
   
    }
if ($gateKeeper->isAllowed('delete_enable') && $location->checkUserDir()) { ?>
    getString("delete"); ?>
   
    } ?>
也可以把条件语句改为如下代码:
if ($gateKeeper->isAllowed('move_enable') && !$location->guestReadtAllowed() && !$location->userReadtAllowed() && $location->getCleanPath() !=="")
解决PC列表模式下显示公共目录(user_read_dirs)下文件时时,表格仍显示重命名和删除列的问题:



大概在137行左右,添加条件判断语句,使表格不显示重命名和删除列,改后代码如下:
if ($gateKeeper->isAllowed('rename_enable') && $location->checkUserDir()) { ?>
   
      
   
    } ?>

if ($gateKeeper->isAllowed('delete_enable') && $location->checkUserDir()) {?>
   
    } ?>
存在问题:即是游客公共目录(public_dirs)又是用户私有目录的文件夹,编辑用户没有编辑权限。

2.修改ajax请求代码,使游客和登录用户能获取到公共目录(public_dirs)、用户只读目录(user_read_dirs)和根目录(starting_dir)中的文件
打开根目录/vfm-admin/ajax/get-files.php文件,查找如下代码:if ($gateKeeper->isAccessAllowed() && $location->editAllowed('../../') && $gateKeeper->isAllowed('view_enable'))
{
$fullpath = $location->getFullPath();
...
}

改为如下代码:
$cleanlocdir = rtrim(ltrim($locdir, './'), '/');
$startdir = './'.$setUp->getConfig('starting_dir');
$cleanstartdir = rtrim(ltrim($startdir, './'), '/');

if ($cleanlocdir === $cleanstartdir
|| $gateKeeper->isAccessAllowed()
&& $location->guestReadtAllowed('../../')
|| $location->editAllowed('../../')
|| $location->userReadtAllowed('../../')
&& $gateKeeper->isAllowed('view_enable')) {
    $fullpath = $location->getFullPath();
...
}

解决平铺视图模式下显示公共目录(user_read_dirs)下文件时时,在文件右上角显示重命名和删除按钮问题:



大概在271行左右,添加条件判断语句,使平铺视图文件右上角不显示重命名和删除按钮,改后代码如下:
if ($gateKeeper->isAllowed('rename_enable') && $location->editAllowed('../../')) {
    $data['icon'] .= '
      
            
      
   
';
}
if ($gateKeeper->isAllowed('delete_enable') && $location->editAllowed('../../')) {
    $data['icon'] .= '
      
            
      
   
';
}

解决PC浏览器打开公共目录(user_read_dirs)时,在文件列表右侧显示重命名和删除按钮问题:


大概在326行左右,添加条件判断语句,使文件列表右侧不显示重命名和删除按钮,改后代码如下:
$data['delete'] = '';

if ($gateKeeper->isAllowed('delete_enable') && $location->editAllowed('../../')) {
    $data['delete'] .= '
';
}

解决手机端打开公共目录(user_read_dirs)时,在文件列表右侧显示重命名和删除按钮问题:



大概在342行左右,添加条件判断语句,使文件列表右侧不显示重命名和删除按钮,改后代码如下码:
if ($gateKeeper->isAllowed('rename_enable') && $location->editAllowed('../../')) {
    $data['delete'] .= '
    '.$setUp->getString("rename").'';
}
if ($gateKeeper->isAllowed('delete_enable') && $location->editAllowed('../../')) {
    $data['delete'] .= '
    '.$setUp->getString("delete").'';
}
相关文件:
打开根目录 vfm-admin/template/list-files.php   //多选操作(左侧):移动、复制、删除
根目录 vfm-admin/include/load-js.php             //单选操作(右侧):更名
根目录 vfm-admin/ajax/get-files.php               //单选操作(右侧):删除



页: [1]
查看完整版本: Veno-File-Manager (VFM4)云盘,让编辑用户无权移动删除只读目录