因为SS的权限没有细分到栏目及文章,
我现在把后台做出来了,但是前台权限判断的时候,看不懂官方的那个函数,因为对PHP语法不太了解- //检查权限
- function checkperm($permtype, $gid=0) {
- global $_SGLOBAL, $_SCONFIG, $channel, $channels;
-
- if(!@include_once(S_ROOT.'./data/system/group.cache.php')) {
- include_once(S_ROOT.'./function/cache.func.php');
- updategroupcache();
- }
- $founderprem = array('managetpl', 'managecss', 'managestyletpl');
- if(ckfounder($_SGLOBAL['supe_uid'])) {
- return ($permtype == 'allowdirectpost') ? false : true; //创始人不做权限检查
- } elseif(in_array($permtype, $founderprem)) {
- return false; //非创始人权限
- }
-
- if(!$gid) {
- if(empty($_SGLOBAL['supe_uid'])) getmember();
- if(empty($_SGLOBAL['member']['groupid'])) {
- $gid = 2; //游客组
- } else {
- $gid = intval($_SGLOBAL['member']['groupid']);
- $gid = getgroupid($_SGLOBAL['member']['experience'], $gid);
- if($gid != $_SGLOBAL['member']['groupid']) {
- updatetable('members', array('groupid'=>$gid), array('uid'=>$_SGLOBAL['supe_uid'])); //更新用户组
- }
- }
-
- if(!empty($channel)) {
- if(!empty($channels['menus'][$channel][$permtype])) {
- $extgroupid = explode("\t", $channels['menus'][$channel][$permtype]);
- if(!in_array($gid, $extgroupid)) return false; //没有频道访问权
- }
- }
- }
- if($permtype == 'allowmanage') return true;
- return empty($_SGLOBAL['grouparr'][$gid][$permtype]) ? false : true;
- }
复制代码 主要是
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,只会模仿,看不懂就模仿不了。
我要改成栏目频道栏目文章逐级判断,
比如我要判断某篇文章的浏览权限,先取得文章的权限,判断通过则通过,不通过在判断栏目,最后判断频道的,
不过我看不懂这段代码不知道怎么模仿
谢谢了 |