codecamp

增加应用权限检测功能

简介

为增强组权限功能,在设置应用使用范围后,将对用户访问该应用时进行权限检测,以确认其是否有权限使用。

应用权限检测逻辑

首先,判断用户是否为管理员以及访问的应用是否已设置权限。若用户为管理员且访问的应用未设置应用权限,则跳过权限检测。若用户为非管理员且访问的应用有权限设置,则获取用户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.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($this->var['member']['uid']){ $uid=$this->var['member']['uid']; }elseif($_GET['uidtoken']){ $uid=intval(dzzdecode($_GET['uidtoken'])); } if(!$appidxu['available']){ showmessage(lang('该应用已关闭,请联系管理员。')); }elseif($uid){ $appuid= C::t('user_field')->fetch($uid); $appuidz=explode(',',$appuid['applist']); if (in_array($appidxu['appid'],$appuidz)){ }elseif($config=dzz_userconfig_init()){ if($config['applist']){ $applist=explode(',',$config['applist']); }else{ $applist=array(); } $appuid= C::t('user_field')->fetch($uid); $appuidz=explode(',',$appuid['applist']); if (in_array($appidxu['appid'],$appuidz)){ }else{ showmessage(lang('您无权限使用该应用,请联系管理员。')); } } }elseif($appidxu['group']==0 || $appidxu['group']==-1){ }else{ Hook::listen('check_login'); } }


修改权限管理切换页数时报错问题
文件没有可以打开的应用
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

技术交流

数据备份恢复和迁移

dzzoffice网盘文件

Dzzoffice系统

插件

媒体播放器

任务板

B站dzzoffice 技术交流的视频文稿

应用市场

dzzoffice中使用onlyoffice协同办公

登录模板

模板1

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }