增加應(yīng)用權(quán)限檢測(cè)功能

2024-07-17 23:51 更新

為了獲取更多最新內(nèi)容及功能更新,請(qǐng)直接訪問(wèn)我們的首頁(yè)以查看DzzOffice筆記的最新地址。

前言

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

應(yīng)用權(quán)限說(shuō)明

已登錄用戶系統(tǒng)管理員機(jī)構(gòu)和部門(mén)管理員游客
是否顯示應(yīng)用是否可用是否顯示應(yīng)用是否可用是否顯示應(yīng)用是否可用是否顯示應(yīng)用是否可用
全部
僅游客可用
部門(mén)管理員可用
僅系統(tǒng)管理員可用
選擇了機(jī)構(gòu)和部門(mén)只限機(jī)構(gòu)和部門(mén)內(nèi)的成員顯示只限機(jī)構(gòu)和部門(mén)內(nèi)的成員可用只限機(jī)構(gòu)和部門(mén)內(nèi)的成員顯示只限機(jī)構(gòu)和部門(mén)內(nèi)的成員顯示只限機(jī)構(gòu)和部門(mén)內(nèi)的成員可用
關(guān)閉

應(yīng)用權(quán)限檢測(cè)邏輯

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

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

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

步驟

文件: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('該應(yīng)用已關(guān)閉,請(qǐng)聯(lián)系管理員。'));
            } elseif ($appidxu['group'] == 0) {
                // 全員使用跳過(guò)
            } 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)) {
                            // 用戶配置中包含該應(yīng)用,有權(quán)限
                        } else {
                            showmessage(lang('您無(wú)權(quán)限使用該應(yīng)用,請(qǐng)聯(lián)系管理員。'));
                        }
                    } else {
                        showmessage(lang('您無(wú)權(quán)限使用該應(yīng)用,請(qǐng)聯(lián)系管理員。'));
                    }
                } elseif ($appidxu['group'] == -1) {
                    // 游客可以使用,跳過(guò)
                } else {
                    Hook::listen('check_login');
                }
            }
        }


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)