织梦dedecms过滤函数,织梦dedecms自定函数

分类:建站教程 Dedecms教程 时间:2025-10-04 19:03 浏览:0 评论:0
0

当前目录列表:

  • 1、关于织梦DedeCMS两个站的新闻共用一个数据的方法
  • 2、织梦主页被篡改的问题,如何解决
  • 3、检验用户是否有权使用某功能的织梦函数TestPurview
  • 关于织梦DedeCMS两个站的新闻共用一个数据的方法

    DedeCMS织梦程序是可以通过修改代码的方式来实现调用其他网站的文章。

    方法:

    第一种方法是DedeCMS自带的一个全局函数,只是以标签的形式将前台调用出来而已。具体代码为:

    1    {dede:geturl runphp='yes'}    

    2    @me = GetCurUrl,;    

    3    {/dede:geturl}

    将上述代码插入到需要显示当前文章URL地址的位置,然后生成文章内容页面即可。

    第二种方法是通过一个标签就可以获取当前url地址,标签如下:

    1    {dede:field name='arcurl'/}

    把上面的一句代码放在文章内容页面模板里面后生成相关文章内容页就可以了。

    第三种方法是通过sql语句调用静态文档地址,具体代码如下:

    1    {dede:field.id runphp='yes'}    

    2    $id=@me;    

    3    @me='';    

    4    $url=GetOneArchive,$id;    

    5    @me=$url['arcurl'];    

    6    {/dede:field.id}

    将上面的代码添加到内容页模板适当的位置后生成相关文章即可。

    dedecms过滤函数,dedecms自定函数

    织梦主页被篡改的问题,如何解决

    这个很烦人的,主要是后台程序造成的。如果后台不常用。那就把后台那个文件夹删了,用到的时候再加上去,不用的时候删除。我被折磨了一个多星期。搜到的方法都用了。还是天天被改。才想到这个。现在这几天好了。

    检验用户是否有权使用某功能的织梦函数TestPurview

    函数TestPurview,$n虽然,看上去只是一个相对比较简单的函数,但是这个函数是非常非常重要的,试想一下如果一个系统中没有检验某个用

    户是否有权限操作某些功能的话,那么,这个系统一定非常危险,因为,随便一个人都可以操作某个功能,例如,进入后台,删除栏目,删除数据库等,就如同一个

    家四周都没有墙一样,随便什么人都可以进入,这样的家完全就是公共场合,完全没有什么安全可言,一个系统也是如此。

    所以,检测系统函数就比较重要了,当然,光这个一个函数还不够,不光要检验用户的使用权限,还要检验用户密码,是不是***,甚至是用户登录ip等,都要检验一下,这样才可以称得上安全的系统。

    本函数在“***登陆类”userlogin.class.php里面的第一个函数就是它,返回的值是true或false,若有权限则返回trure否则返回false。

    通过教程“织梦中cookie和session的应用”我们知道了,当我们登录后台后,织梦系统会把登录的用户信息写入session里面,并把session存放在/data/session文件夹里面。

    因为不同的用户登录后台,产生的session是不一样的,我就在后台注册一个发布员,用户名为fby。并且,在后台定义“信息发布员”的权限如下图所示。

    登录/注册后可看大图

    我整理了一下“信息发布员”的权限如下:

    列出授权栏目,t_AccList

    发布授权文档,a_AccNew

    列出授权文档,a_AccList

    列出我发布的文档,a_MyList

    修改我发布的文档,a_MyEdit

    删除我发布的文档,a_MyDel

    更改个人密码,sys_MdPwd

    评论管理,sys_Feedback

    管理我的上传,sys_MyUpload

    当我用fby用户名登录后,在data/session/文件夹里面,生成一个名为sess_3vtlqpg0pnlmc63pd5ai86gl16 的 session 。这个session里面的内容如下所示。

    securimage_code_value|s:4:"npll";

    dede_admin_id|s:1:"8";

    dede_admin_type|s:1:"1";

    dede_admin_channel|s:0:"";

    dede_admin_name|s:3:"fby";

    font color="Blue"dede_admin_purview|s:107:"t_AccList

    a_AccNew a_AccList a_MyList a_MyEdit a_MyDel sys_MdPwd sys_Feedback

    sys_MyUpload plus_留言簿模块 ";/font

    dede_admin_style|s:10:"newDedeCMS";

    复制代码

    如果我们以超级***,也就是最高级别的身份登录后台后,我们同样得到类似的如下内容。

    securimage_code_value|s:4:"2gsf";

    dede_admin_id|s:1:"1";

    dede_admin_type|s:2:"10";

    dede_admin_channel|s:1:"0";

    dede_admin_name|s:5:"admin";

    font color="Blue"dede_admin_purview|s:15:"admin_AllowAll ";/font

    dede_admin_style|s:10:"newDedeCMS";

    复制代码

    当登录后,这些是如何生成的?这个我们在上面提到了,以前的教程已经详细讲解了,其实,就是通过“***登陆类”userlogin.class.php里面的函数来实现的,当然,不只是这个文件。

    我们分析上面这些,完全就是为了函数TestPurview,$n作准备的,好了,现在我们来分析一下这个用户权限检验函数。

    函数:

    function TestPurview,$n

    {

    $rs = FALSE;

    $purview = $GLOBALS['cuserLogin']-getPurview,;

    if,preg_match('/admin_AllowAll/i',$purview)

    {

    return TRUE;

    }

    if,$n==''

    {

    return TRUE;

    }

    if,!isset($GLOBALS['groupRanks'])

    {

    $GLOBALS['groupRanks'] = explode,' ',$purview;

    }

    $ns = explode,',',$n;

    foreach,$ns as $n

    {

    //只要找到一个匹配的权限,即可认为用户有权访问此页面

    if,$n==''

    {

    continue;

    }

    if,in_array($n,$GLOBALS['groupRanks'])

    {

    $rs = TRUE; break;

    }

    }

    return $rs;

    }

    复制代码

    通过getPurview,方法,我们从session得到了dede_admin_purview里面的值,因

    为,$GLOBALS['cuserLogin']是实例化“登录类”的对像,而这个登录类的构造函数,在我们实例化时,已经把session里面的值赋

    给了$this-userPurview,代码如下所示。

    $this-userID = $_SESSION[$this-keepUserIDTag];

    $this-userType = $_SESSION[$this-keepUserTypeTag];

    $this-userChannel = $_SESSION[$this-keepUserChannelTag];

    $this-userName = $_SESSION[$this-keepUserNameTag];

    $this-userPurview = $_SESSION[$this-keepUserPurviewTag];

    $this-adminStyle = $_SESSION[$this-keepAdminStyleTag];

    复制代码

    从上面代码我们就不难发现$this-userPurview=$_SESSION['dede_admin_purview'],即

    t_AccList a_AccNew a_AccList a_MyList a_MyEdit a_MyDel sys_MdPwd

    sys_Feedback sys_MyUpload plus_留言簿模块这些值,明白了这一点,这个TestPurview,$n就简单多了。

    1、条件判断:

    if,preg_match('/admin_AllowAll/i',$purview)

    {

    return TRUE;

    }

    复制代码

    如果我们用的是***登录,那么,$_SESSION['dede_admin_purview']的值等于admin_AllowAll,返回true,所以,这句代码就是判断是不是管理登录。

    2、条件判断

    if,$n==''

    {

    return TRUE;

    }

    复制代码

    若参数为空,直接返回true,也就是说,只要不提供功能参数,就认为是可以操作的,所以,这一点要注意了,如果你不小心,忘记写参数,那么,很可能本想过虑掉的用户结果没有过虑掉,这是非常危险的,所以,这个最好有个提示,有个对话框,这样可以提醒***。

    3、把登录的后台的用户的权限,例如,本例子中的“信息发布员”权限$_SESSION['dede_admin_purview'],转换成数组存放到全局变量$GLOBALS['groupRanks']里面,以备下面之用。

    if,!isset($GLOBALS['groupRanks'])

    {

    $GLOBALS['groupRanks'] = explode,' ',$purview;

    }

    复制代码

    4、把功能参数转换成数组:$ns = explode,',',$n;

    5、遍历:foreach,$ns as

    $n,就是把传递过来的功能参数,通过in_array,$n,$GLOBALS['groupRanks']这个函数进行对比,看一下$n里面的有

    没有存功能在数组$_SESSION['dede_admin_purview']里面。例如:本例子信息发布员的权限在上我们已经知道了

    有:t_AccList a_AccNew a_AccList a_MyList a_MyEdit a_MyDel sys_MdPwd

    sys_Feedback sys_MyUpload plus_留言簿模块这些值。

    如果$n是:a_AccNew,t_New,经过上面一个遍历,我们发现,其中a_AccNew在数

    组$GLOBALS['groupRanks'],函数立马跳出来,返回一个true,也就是说织梦的这个函数,只要$n里面有一个是

    与$GLOBALS['groupRanks']里面的值一样,

    就可以操作这个页面。而不需要全部都在$GLOBALS['groupRanks']里面才可以操作这个页面。

    当然,你可以根据自己需要,直接严格匹配,只有全部都在登录用户的权限里面才可以操作页面。这个功能也简单,只要作如下更改:

    if,!in_array($n,$GLOBALS['groupRanks'])

    {

    $rs = FALSE; break;

    }

    复制代码

    也就是把$n参数里面的值判断一下,只要有一个不在登录用户的权限里面,就返回false,退出操作。

    1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
    2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
    3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
    4. 建站教程 > 织梦dedecms过滤函数,织梦dedecms自定函数

    用户评论