检测用户是否有权限操作某栏目函数CheckCatalog($cid, $msg)
这个函数CheckCatalog($cid,$msg)跟函数TestPurview($n),功能有点类似,但是,都是检测用户是不是有权限操作某一功能,但是,二者是完全不一样的。
二个函数的不同点:
1、参数不同:
CheckCatalog($cid,$msg):这个函数的参数第一个是栏目id,第二个是提示信息。例如:CheckCatalog($id,"你无权删除本栏目!")。
TestPurview($n):这个函数的参数$n是功能列表或单独一个某一功能的检测。例如:TestPurview(a__MyEdit)。
2、返回值不同:
CheckCatalog($cid,$msg):要么返回true,要么返回false。
TestPurview($n):要么返回true,要么返回提示信息对话框,也就是说这个函数的false已经变成了对话框了更友好。
这样比较二个函数好像没有什么可比性,因为,除了他们的功能类似外,其它,都不同,但是这样比较一下会更加容易弄明白他们区别。可以方便日后织梦二次开发之用。
回到正题,函数CheckCatalog($cid,$msg),我们分析一下这个函数功能。
/** * 检测用户是否有权限操作某栏目 * * @access public * @param int $cid 频道id * @param string $msg 返回消息 * @return string */ function CheckCatalog($cid, $msg) { global $cfg_admin_channel, $admin_catalogs; if($cfg_admin_channel=='all' || TestAdmin()) { return TRUE; } if( !in_array($cid, $admin_catalogs) ) { ShowMsg(" $msg <br/><br/><a href='javascript:history.go(-1);'>点击此返回上一页>></a>",'javascript:;'); exit(); } return TRUE; }
第一个条件语句里面的$cfg_admin_channel其实是在data/cache/admincat_登录id值.inc文件里面,这个文件一般包括如下内容:
<?php $cfg_admin_channel = 'all'; $admin_catalogs = array(); ?>
这些内容是如何建立的呢?在“登录类”文件userlogin.class.php里面有一个函数——重写用户权限频道ReWriteAdminChannel()这个函数里面,我们可以看到是如何定义的。
当这变量$cfg_admin_channel值为all或是“超级管理员”时,返回true,说明这个用户有权限操作id为$cid的栏目。但是当这二条件都不成立时,将进入下面一个条件判断,判断$cid是不是在数组$admin_catalogs里面,若不在则返回一个对话框并退出。
最后,二个条件都不成立,直接返回true,当第一个条件不成立,说明了还剩下二种情况,一是false也就是第二个条件,二是true。
正常我们想一个函数里要么true要么就是flase,为什么还有除了这二个之外的另外一个呢?这里是为了防止第一个条件直接不存在,例如,admincat_登录id值.inc直接不存放,或直接没有调用重写用户权限频道,或直接没有调用TestAdmin()。这个函数就是这地方有点不好理解,只要把这一点理解了,那么,这个函数就比较简单了。