检测用户是否有权限操作某栏目函数CheckCatalog($cid, $msg)

admin2023-01-17956

这个函数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()。这个函数就是这地方有点不好理解,只要把这一点理解了,那么,这个函数就比较简单了。


网友评论