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 //自定义设置文件
|
|