欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

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

shiping1 的头像
彻底禁止游客访问 Discuz! 7.0搭建的论坛
2009-09-17 11:11:11

 

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

文件:/include/common.func.php; 
说明:这个文件中包含的代码几乎在访问论坛任何页面时都会被执行,它包含了很多对用户权限的控制,我们只要添加对游客的访问限制即可; 
关注范围:L365~L378:

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');

}

//论坛对游客关闭结束


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

方法是个好方法,但经本人实验有个问题,不知能否解决?
如果加上这些代码,注册设为人工审核的况下,如果有人新注册,在审核通过之前,你没法进行任何操作,打开就是限制访问,如果我有已经注册的账户也没办法登录!

来自  http://yuppieq.blog.51cto.com/827798/202614
普通分类: