增加应用权限检测功能
为了获取更多最新内容及功能更新,请直接访问我们的首页以查看DzzOffice笔记的最新地址。
前言
应用权限就是限定此应用使用范围。然而,官方仅在应用中心和首页判断是否显示该应用,并未在用户访问该应用时检测其是否具有权限。因此,在现有基础上,我们将加强应用权限功能。在设置应用使用范围后,我们将在用户访问该应用时进行权限检测,以确认其是否有权限使用。
应用权限说明
| 已登录用户 | 系统管理员 | 机构和部门管理员 | 游客 | |||||
| 是否显示应用 | 是否可用 | 是否显示应用 | 是否可用 | 是否显示应用 | 是否可用 | 是否显示应用 | 是否可用 | |
| 全部 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 
| 仅游客可用 | 否 | 否 | 否 | 是 | 否 | 否 | 是 | 是 | 
| 部门管理员可用 | 是 | 是 | 是 | 是 | 是 | 是 | 否 | 否 | 
| 仅系统管理员可用 | 否 | 否 | 是 | 是 | 否 | 否 | 否 | 否 | 
| 选择了机构和部门 | 只限机构和部门内的成员显示 | 只限机构和部门内的成员可用 | 只限机构和部门内的成员显示 | 是 | 只限机构和部门内的成员显示 | 只限机构和部门内的成员可用 | 否 | 否 | 
| 关闭 | 否 | 否 | 否 | 是 | 否 | 否 | 否 | 否 | 
应用权限检测逻辑
首先,判断用户是否为管理员以及访问的应用是否已设置权限。若用户为管理员且访问的应用未设置应用权限,则跳过权限检测。若用户为非管理员且访问的应用有权限设置,则获取用户UID。若用户已登录,则以登录用户的UID作为UID参数;若用户未登录,则检查用户输入数据中是否带有uidtoken参数,即通过加密处理(dzzencode)的用户UID,若有,则以此作为UID参数。接下来,判断UID参数是否有值。若有,则根据UID检查该用户是否有权限访问该应用;若无UID,则判断访问的应用是否设置了全员可用或是否仅限游客访问。若应用设置为全员可用或仅限游客可用,则允许未登录用户访问应用;反之,跳转至登录界面。
问:检查用户输入数据中是否带有uidtoken参数是指?
答:在某些特定场景中,我们需要为Dzz外部提供接口,并在接口中包含Dzz中用户的UID。为了确保安全性,我们需要对这些UID进行加密处理(使用dzzencode算法),以防止潜在的安全问题。例如,当使用OnlyOffice预览和编辑文档时,OnlyOffice会与Dzz进行通信,将在OnlyOffice中编辑的文档保存到Dzz上。然而,Dzz无法知道该文档是由哪个用户保存的。因此,我们需要在OnlyOffice访问的URL中包含uidtoken参数,以便Dzz了解是哪个用户需要保存文档。
步骤
文件:core\class\dzz\dzz_app.php在if(isset($this->var['setting']['nocacheheaders']) && $this->var['setting']['nocacheheaders'])前插入以下代码:
if (!$this->var['member']['adminid'] && $appidxu = C::t('app_market')->fetch_by_identifier(CURMODULE)) {
            if (!$appidxu['available']) {
                showmessage(lang('该应用已关闭,请联系管理员。'));
            } elseif ($appidxu['group'] == 0) {
                // 全员使用跳过
            } else {
                if ($this->var['member']['uid']) {
                    $uid = $this->var['member']['uid'];
                } elseif ($_GET['uidtoken']) {
                    $uid = intval(dzzdecode($_GET['uidtoken']));
                }
                if ($uid) {
                    $config = array();
                    if(!$config=C::t('user_field')->fetch($uid)){
                        $config= dzz_userconfig_init();
                    }
                    if ($config && isset($config['applist'])) {
                        $applist = explode(',', $config['applist']);
                        if (in_array($appidxu['appid'], $applist, true)) {
                            // 用户配置中包含该应用,有权限
                        } else {
                            showmessage(lang('您无权限使用该应用,请联系管理员。'));
                        }
                    } else {
                        showmessage(lang('您无权限使用该应用,请联系管理员。'));
                    }
                } elseif ($appidxu['group'] == -1) {
                    // 游客可以使用,跳过
                } else {
                    Hook::listen('check_login');
                }
            }
        }

 免费 AI IDE
 免费 AI IDE 
									 
			

 
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
更多建议: