增加應用權限檢測功能

2024-07-17 23:51 更新

為了獲取更多最新內容及功能更新,請直接訪問我們的首頁以查看DzzOffice筆記的最新地址。

前言

應用權限就是限定此應用使用范圍。然而,官方僅在應用中心和首頁判斷是否顯示該應用,并未在用戶訪問該應用時檢測其是否具有權限。因此,在現(xiàn)有基礎上,我們將加強應用權限功能。在設置應用使用范圍后,我們將在用戶訪問該應用時進行權限檢測,以確認其是否有權限使用。

應用權限說明

已登錄用戶系統(tǒng)管理員機構和部門管理員游客
是否顯示應用是否可用是否顯示應用是否可用是否顯示應用是否可用是否顯示應用是否可用
全部
僅游客可用
部門管理員可用
僅系統(tǒng)管理員可用
選擇了機構和部門只限機構和部門內的成員顯示只限機構和部門內的成員可用只限機構和部門內的成員顯示只限機構和部門內的成員顯示只限機構和部門內的成員可用
關閉

應用權限檢測邏輯

首先,判斷用戶是否為管理員以及訪問的應用是否已設置權限。若用戶為管理員且訪問的應用未設置應用權限,則跳過權限檢測。若用戶為非管理員且訪問的應用有權限設置,則獲取用戶UID。若用戶已登錄,則以登錄用戶的UID作為UID參數(shù);若用戶未登錄,則檢查用戶輸入數(shù)據(jù)中是否帶有uidtoken參數(shù),即通過加密處理(dzzencode)的用戶UID,若有,則以此作為UID參數(shù)。接下來,判斷UID參數(shù)是否有值。若有,則根據(jù)UID檢查該用戶是否有權限訪問該應用;若無UID,則判斷訪問的應用是否設置了全員可用或是否僅限游客訪問。若應用設置為全員可用或僅限游客可用,則允許未登錄用戶訪問應用;反之,跳轉至登錄界面。

問:檢查用戶輸入數(shù)據(jù)中是否帶有uidtoken參數(shù)是指?

答:在某些特定場景中,我們需要為Dzz外部提供接口,并在接口中包含Dzz中用戶的UID。為了確保安全性,我們需要對這些UID進行加密處理(使用dzzencode算法),以防止?jié)撛诘陌踩珕栴}。例如,當使用OnlyOffice預覽和編輯文檔時,OnlyOffice會與Dzz進行通信,將在OnlyOffice中編輯的文檔保存到Dzz上。然而,Dzz無法知道該文檔是由哪個用戶保存的。因此,我們需要在OnlyOffice訪問的URL中包含uidtoken參數(shù),以便Dzz了解是哪個用戶需要保存文檔。

步驟

文件:core\class\dzz\dzz_app.phpif(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('該應用已關閉,請聯(lián)系管理員。'));
            } 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('您無權限使用該應用,請聯(lián)系管理員。'));
                        }
                    } else {
                        showmessage(lang('您無權限使用該應用,請聯(lián)系管理員。'));
                    }
                } elseif ($appidxu['group'] == -1) {
                    // 游客可以使用,跳過
                } else {
                    Hook::listen('check_login');
                }
            }
        }


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號