热搜词
发表于 2022-9-3 18:20:59 | 显示全部楼层 |阅读模式
Veno-File-Manager (VFM4)云盘游客文件分享按钮不显示的原因及解决办法

自定义配置文件:
  1.   'sendfiles_enable_guest' => true,
复制代码

解决方法:
打开  class.gatekeeper.php 文件,查找 isAllowed($action)  对象方法,相关代码如下:
  1.         /**
  2.          * Check if target action is allowed
  3.          *
  4.          * @param string $action action to check
  5.          *
  6.          * @return true/false
  7.          */
  8.         public function isAllowed($action)
  9.         {
  10.             global $setUp;
  11.             if ($action && $this->isAccessAllowed()) {
  12.                 $role = $this->getUserInfo('role');
  13.                 $role = $role == null ? 'guest' : $role;
  14.                 // $role =  'guest' ;
  15.                 if ($role == 'superadmin') {
  16.                     return true;
  17.                 }

  18.                 $base_actions = array(
  19.                     'view_enable',
  20.                     'viewdirs_enable',
  21.                     'download_enable',
  22.                 );

  23.                 // Base actions true for all except Guest and User
  24.                 if (in_array($action, $base_actions) && $role !== 'guest' && $role !== 'user') {
  25.                     return true;
  26.                 }

  27.                 $role_ext = $role == 'admin' ? '' : '_'.$role;

  28.                 return $setUp->getConfig($action.$role_ext);
  29.             }
  30.             return false;
  31.         }
复制代码
把其中的   $role = $role == null ? 'guest' : $role;  三目运算符条件判断改动一下,修改后代码为:
  1. $role = !$this-> isUserLoggedIn() ? 'guest' : $role;
复制代码
如果使用if语句重写,代码为:
  1. // $role = $role == null ? 'guest' : $role;
  2. if (!$this-> isUserLoggedIn()) {
  3. $role = 'guest';
  4. } else {
  5. $role = $role;
  6. }
复制代码

修改行整段代码如下:
  1.         /**
  2.          * Check if target action is allowed
  3.          *
  4.          * @param string $action action to check
  5.          *
  6.          * @return true/false
  7.          */
  8.         public function isAllowed($action)
  9.         {
  10.             global $setUp;
  11.             if ($action && $this->isAccessAllowed()) {
  12.                 $role = $this->getUserInfo('role');
  13.                 // $role = $role == null ? 'guest' : $role;
  14.                 $role = !$this-> isUserLoggedIn() ? 'guest' : $role;

  15.                 if ($role == 'superadmin') {
  16.                     return true;
  17.                 }

  18.                 $base_actions = array(
  19.                     'view_enable',
  20.                     'viewdirs_enable',
  21.                     'download_enable',
  22.                 );

  23.                 // Base actions true for all except Guest and User
  24.                 if (in_array($action, $base_actions) && $role !== 'guest' && $role !== 'user') {
  25.                     return true;
  26.                 }

  27.                 $role_ext = $role == 'admin' ? '' : '_'.$role;

  28.                 return $setUp->getConfig($action.$role_ext);
  29.             }
  30.             return false;
  31.         }
复制代码

同时,也要在 getUserInfo() 对象方法中,加入未登录用户(游客)可访问公共目录(public_dirs)内容,把游客访问目录限制在指定目录内,添加后代码如下:
  1.         /**
  2.          * Get user info ('name', 'role', 'dir', 'email')
  3.          *
  4.          * @param int $info index of corresponding user info
  5.          *
  6.          * @return info requested
  7.          */
  8.         public function getUserInfo($info)
  9.         {
  10.                         global $setUp;
  11.             if ($this->isUserLoggedIn()
  12.                 && isset($_SESSION['vfm_user_name'])
  13.                 && strlen($_SESSION['vfm_user_name']) > 0
  14.             ) {
  15.                 $username = $_SESSION['vfm_user_name'];
  16.                 $curruser = $this->getCurrentUser($username);

  17.                 if (isset($curruser[$info]) && strlen($curruser[$info]) > 0) {
  18.                     return $curruser[$info];
  19.                 }
  20.             }
  21.                          //游客可访问公共目录(public_dirs)内容
  22.                          else  {
  23.                                 $public_dirs = $setUp->getConfig('public_dirs');
  24.                                 $public_dirs = '["' . join('","', array_values($public_dirs) ) . '"]';
  25.                                 return $public_dirs;                                          
  26.                             }
  27.             return null;
  28.         }
复制代码


相关文件:
根目录/vfm-admin/class/class.gatekeeper.php       //控制认证(用户状态及相关权限)的类
根目录/vfm-admin/template/list-files.php      //条件判断是否显示分享按钮模版文件
根目录/vfm-admin/template/modals.php     //条件判断是否有分享权限功能模版文件
根目录/vfm-admin/config.php    //自定义设置文件



全部评论0
回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|管理员之家 ( 苏ICP备2023053177号-2 )

GMT+8, 2024-12-27 19:27 , Processed in 0.175898 second(s), 22 queries .

Powered by Discuz! X3.5

Cpoyright © 2001-2024 Discuz! Team