• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > CMS教程 > discuz教程 >

彻底禁止游客访问Discuz! 7.0搭建的论坛

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-04-25点击:

前一篇文章中也提到了,我们正在用 Discuz! 搭建一个论坛,我们这个论坛完全是用作内部交流的,不希望没有账号的人(包括搜索引擎)看到论坛内的任何信息。在管理员设置里面找了半天,发现一个很奇怪也蛮有趣的现象:可以让“禁止IP”、“禁止访问”,甚至“版主”、“超级版主”等用户组不能访问论坛的任何页面(用户组基本设置中的“允许访问论坛”),但对于游客则没有这个选项。也许对于大多数开放的论坛无所谓,但对于我们这种特殊的论坛,就只能自己修改代码了。
这次的修改要简单的多,只要添加两句话就足够了,我们来看看是如何修改的:
文件:/include/common.func.php;
说明:这个文件中包含的代码几乎在访问论坛任何页面时都会被执行,它包含了很多对用户权限的控制,我们只要添加对游客的访问限制即可;

  if(isset($allowvisit) && $allowvisit == 0 && !(CURSCRIPT == 'member' && ($action == 'groupexpiry' || $action == 'activate'))) {
    showmessage('user_banned', NULL, 'HALTED');
} elseif(!(in_array(CURSCRIPT, array('logging', 'wap', 'seccode', 'ajax')) || $adminid == 1)) {
    if($bbclosed) {
        clearcookies();
        $closedreason = $db->result_first("SELECT value FROM {$tablepre}settings WHERE variable='closedreason'");
        showmessage($closedreason ? $closedreason : 'board_closed', NULL, 'NOPERM');
    }
    periodscheck('visitbanperiods');

369行开始的那段代码是对被禁止的用户组或账户进行屏蔽,以及处理论坛暂时关闭的情况,就在它前面加上对游客的限制即可。游客跟已经登录的用户的最大区别之一就是游客没有uid信息,我么就通过有没有uid来判断这个用户是不是游客。另外,虽然游客不能访问论坛的任何页面,但总要让他能够注册或者登录吧,所以要把相关的页面权限放开,除了371行中所列的几项外,还要放开seccode,除非你的论坛设置是注册和登录时都不需要输入验证码。
修改内容:

  //论坛对游客关闭
if(!$discuz_uid && !(defined('CURSCRIPT') && in_array(CURSCRIPT, array('logging', 'wap', 'seccode','ajax','register')))) {
                $closedreason = $db->result($db->query("SELECT value FROM {$tablepre}settings WHERE variable='closedreason'"), 0);
                showmessage('您未被授权访问', NULL, 'NOPERM');
}
//论坛对游客关闭结束

这样修改之后,未登录状态下访问论坛会得到类似于“您无权进行当前操作,这可能因以下原因之一造成:对不起,您还没有登录,无法进行此操作。”的提示信息,并直接跳转到登录界面。     

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ