Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[已答复] 能帮我解释下这段代码的意思吗?

[复制链接]
lscgzwd 发表于 2009-12-1 16:08:27 | 显示全部楼层 |阅读模式
因为SS的权限没有细分到栏目及文章,
我现在把后台做出来了,但是前台权限判断的时候,看不懂官方的那个函数,因为对PHP语法不太了解
  1. //检查权限
  2. function checkperm($permtype, $gid=0) {
  3.         global $_SGLOBAL, $_SCONFIG, $channel, $channels;
  4.        
  5.         if(!@include_once(S_ROOT.'./data/system/group.cache.php')) {
  6.                 include_once(S_ROOT.'./function/cache.func.php');
  7.                 updategroupcache();
  8.         }

  9.         $founderprem = array('managetpl', 'managecss', 'managestyletpl');
  10.         if(ckfounder($_SGLOBAL['supe_uid'])) {
  11.                 return ($permtype == 'allowdirectpost') ? false : true;        //创始人不做权限检查
  12.         } elseif(in_array($permtype, $founderprem)) {
  13.                 return false;        //非创始人权限
  14.         }
  15.        
  16.         if(!$gid) {

  17.                 if(empty($_SGLOBAL['supe_uid'])) getmember();
  18.                 if(empty($_SGLOBAL['member']['groupid'])) {
  19.                         $gid = 2;        //游客组
  20.                 } else {
  21.                         $gid = intval($_SGLOBAL['member']['groupid']);
  22.                         $gid = getgroupid($_SGLOBAL['member']['experience'], $gid);
  23.                         if($gid != $_SGLOBAL['member']['groupid']) {
  24.                                 updatetable('members', array('groupid'=>$gid), array('uid'=>$_SGLOBAL['supe_uid']));        //更新用户组
  25.                         }
  26.                 }
  27.                
  28.                 if(!empty($channel)) {
  29.                         if(!empty($channels['menus'][$channel][$permtype])) {
  30.                                 $extgroupid = explode("\t", $channels['menus'][$channel][$permtype]);
  31.                                 if(!in_array($gid, $extgroupid)) return false;        //没有频道访问权
  32.                         }
  33.                 }

  34.         }
  35.         if($permtype == 'allowmanage') return true;
  36.         return empty($_SGLOBAL['grouparr'][$gid][$permtype]) ? false : true;
  37. }
复制代码
主要是
if(!empty($channel)) {
                        if(!empty($channels['menus'][$channel][$permtype])) {
                                $extgroupid = explode("\t", $channels['menus'][$channel][$permtype]);
                                if(!in_array($gid, $extgroupid)) return false;        //没有频道访问权
                        }
                }

其中的 (!empty($channels['menus'][$channel][$permtype]))  是什么意思?
三维数组是否为空?数组从何而来的?这个函数中没有看到定义数组啊?
同样最后一行:return empty($_SGLOBAL['grouparr'][$gid][$permtype]) ? false : true;
这里也是一样的用法。
是数组引用,还是什么呢?抱歉我确实不会PHP,只会模仿,看不懂就模仿不了。
我要改成栏目频道栏目文章逐级判断,
比如我要判断某篇文章的浏览权限,先取得文章的权限,判断通过则通过,不通过在判断栏目,最后判断频道的,
不过我看不懂这段代码不知道怎么模仿

谢谢了
lidq.jingwu 发表于 2009-12-1 17:15:41 | 显示全部楼层
这段代码太长了。
$channels是存放所有频道信息的变量,在模板中可以使用。
$_SGLOBAL是一个全局变量,它里面存放了用户相关的数据与用户组的数据。

这两个变量只可以使用,不可以往里面添加数据。
回复

使用道具 举报

 楼主| lscgzwd 发表于 2009-12-2 08:47:47 | 显示全部楼层
回复 2# lidq.jingwu


    谢谢热心回复!这个应该相当于C#里面的结构数组一样吗?
回复

使用道具 举报

lidq.jingwu 发表于 2009-12-2 09:41:53 | 显示全部楼层
我没有学过C#,它里面的结构数组是什么我不理解。
我只知道这两个变量都是在common.php文件加载的过程中,从数据库中取数据而得到的。
$channels是一个即时更新的变量,而$_SGLOBAL是一个缓存的全局变量,不会即时更新。
回复

使用道具 举报

 楼主| lscgzwd 发表于 2009-12-4 22:57:54 | 显示全部楼层
回复 4# lidq.jingwu


    呵呵,就是一个数组里面存取了不同类型的其他的变量,或者数组包含数组等!
问题已经解决了,呵呵,最后没有去动这个变量,呵呵,时间有限,搞出效果就OK啦,

非常感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-17 12:53 , Processed in 0.022775 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表