為了獲取更多最新內(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)限使用。
已登錄用戶 | 系統(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)閉 | 否 | 否 | 否 | 是 | 否 | 否 | 否 | 否 |
首先,判斷用戶是否為管理員以及訪問(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)至登錄界面。
答:在某些特定場(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.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('該應(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');
}
}
}
更多建議: