灰儿 发表于 2022-9-3 18:20:59

Veno-File-Manager (VFM4)云盘游客文件分享按钮不显示解决办法

Veno-File-Manager (VFM4)云盘游客文件分享按钮不显示的原因及解决办法

自定义配置文件:
'sendfiles_enable_guest' => true,
解决方法:
打开class.gatekeeper.php 文件,查找 isAllowed($action)对象方法,相关代码如下:
      /**
         * Check if target action is allowed
         *
         * @param string $action action to check
         *
         * @return true/false
         */
      public function isAllowed($action)
      {
            global $setUp;
            if ($action && $this->isAccessAllowed()) {
                $role = $this->getUserInfo('role');
                $role = $role == null ? 'guest' : $role;
                // $role ='guest' ;
                if ($role == 'superadmin') {
                  return true;
                }

                $base_actions = array(
                  'view_enable',
                  'viewdirs_enable',
                  'download_enable',
                );

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

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

                return $setUp->getConfig($action.$role_ext);
            }
            return false;
      }把其中的   $role = $role == null ? 'guest' : $role;三目运算符条件判断改动一下,修改后代码为:$role = !$this-> isUserLoggedIn() ? 'guest' : $role;如果使用if语句重写,代码为:
// $role = $role == null ? 'guest' : $role;
if (!$this-> isUserLoggedIn()) {
$role = 'guest';
} else {
$role = $role;
}
修改行整段代码如下:      /**
         * Check if target action is allowed
         *
         * @param string $action action to check
         *
         * @return true/false
         */
      public function isAllowed($action)
      {
            global $setUp;
            if ($action && $this->isAccessAllowed()) {
                $role = $this->getUserInfo('role');
                // $role = $role == null ? 'guest' : $role;
                $role = !$this-> isUserLoggedIn() ? 'guest' : $role;

                if ($role == 'superadmin') {
                  return true;
                }

                $base_actions = array(
                  'view_enable',
                  'viewdirs_enable',
                  'download_enable',
                );

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

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

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

                if (isset($curruser[$info]) && strlen($curruser[$info]) > 0) {
                  return $curruser[$info];
                }
            }
                       //游客可访问公共目录(public_dirs)内容
                       else{
                                $public_dirs = $setUp->getConfig('public_dirs');
                                $public_dirs = '["' . join('","', array_values($public_dirs) ) . '"]';
                                return $public_dirs;                                          
                          }
            return null;
      }

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



页: [1]
查看完整版本: Veno-File-Manager (VFM4)云盘游客文件分享按钮不显示解决办法