Объединенный Открытый Проект - Сайт для Настоящих Компьютерщиков

Объединенный Открытый Проект

Сайт для Настоящих Компьютерщиков

; Логин:
  Пароль:
Обычный
Безопасный
Запомнить пользователя



Зарегистрироваться
Забыли пароль?
 
 
 
Объединенный Открытый Проект »   Русский IkonBoard »   Хаки для Ikonboard »   Бан для отдельного форума.
RSS

Бан для отдельного форума.

Запрещаем конкретному пользователю доступ на отдельный форум.

Текущий рейтинг темы: 7.0000

<<Назад  Вперед>>Модератор: GramПечать
 
Gram
Модератор раздела

Gram
Откуда: здешний
Всего сообщений: 566
Рейтинг пользователя: 14

Репутация пользователя: 1




Дата регистрации на форуме:
23 июля 2003
Иногда складывается ситуация, когда необходимо забанить один из форумов для конкретного участника, т.е. запретить доступ на определенный форум определенному участнику. Так вот делается это достаточно просто. Смысл такой: в профиле для закрытых форумов пишется что то типа 22=yes&23=yes - это номера закрытых форумов, на которые имеется доступ. Так вот туда можно вписать номера форумов, на которые мы запрещаем доступ. Естественно вместо yes необходимо написать no, например: 22=yes&23=yes&5=no (на форум с номером 5 мы запрещаем доступ). Так вот собственно реализация этой фичи:

Открываем topic.cgi, post.cgi, postings.cgi, printpage.cgi и заменяем ВСЕ строчки вида

if (("$privateforum" eq "yes" && "$allowed" ne "yes")) {

На

if (("$privateforum" eq "yes" && "$allowed" ne "yes") || $allowedentry{$inforum} eq "no") {

Открываем forums.cgi и перед строчкой

if (("$privateforum" eq "yes") && ("$allowed" ne "yes"))  { &accessneeded; }

Пишем

if ($allowedentry{$inforum} eq "no") { &error("входе в закрытый форум&К сожалению, у вас нет доступа к этому форуму"); }

Открываем newposts.cgi, search2.cgi (или search.cgi) и заменяем ВЕЗДЕ

if (($privateforum eq "yes") && ($allowedentry{$forumid} ne "yes")) { next; }

На
if (($privateforum eq "yes") && ($allowedentry{$forumid} ne "yes") || ($allowedentry{$forumid} eq "no")) { next; }

На главной страничке форума (board.cgi) скрывать форум бесмысленно: во-первых, юзер знает о его существовании, а во-вторых пусть смотрит и корит себя за проступки. Может опомнится и прощение попросит (за это мы ему доступ и откроем). Так же необходимо поправить скрипт рассылки (subsc.cgi), но поскольку у меня пока его нет в наличии, то допишу чуть попозже. Теперь самое главное: делаем настройки через Админцентр:

Открываем setmembers.cgi и находим:

if ($tocheck eq "yes") {

И заменяем на:

if ($tocheck eq "yes" or  $tocheck eq "no") {

Ищем чуть ниже:

if ($privateforum eq "yes") {

                $grab = "$forumid|$forumname";

                push(@newforums, $grab);

            }


И сразу после этого пишем:

else {

              $grab1 = "$forumid|$forumname";

                push(@newforums1, $grab1);  

            

         }


Еще чуть ниже ищем код:

foreach $line (@allowedforums) {

            ($forumid, $forumname) = split(/\|/,$line);

            if ($allowedentry2{$forumid} eq "yes") { $checked = " checked"; }

            else { $checked = ""; }

            $privateoutput .= qq~<input type="checkbox" name="allow$forumid" value="yes"$checked>$forumname<br>\n~;

            }


И сразу после него пишем:

foreach $line (@newforums1) {

            ($forumid, $forumname) = split(/\|/,$line);

            if ($allowedentry2{$forumid} eq "no") { $checked = " checked"; }

            else { $checked = ""; }

            $banforumoutput .= qq~<input type="checkbox" name="allow$forumid" value="no" $checked>$forumname<br>\n~;

            }


Затем ищем еще чуть ниже:

if ($privateoutput) {

       $privateoutput = qq~

           <td bgcolor=#FFFFFF align=left colspan=2><font face=verdana color=#333333 size=1><b>Доступ на закрытые форумы (выберите те форумы, на которые участник должен иметь доступ):</b><br>

           $privateoutput</td></tr><tr>~;

    }


Заменяем на:

if ($privateoutput) {

       $privateoutput = qq~

           <td bgcolor=#FFFFFF align=left colspan=2><font face=verdana color=#333333 size=1><b>Доступ на закрытые форумы (выберите те форумы, на которые участник должен иметь доступ):</b><br>

           $privateoutput</td></tr><tr><td bgcolor=#FFFFFF align=left colspan=2><font face=verdana color=#333333 size=1><b>Закрыть доступ на открытые форумы (выберите те форумы, на которые участник НЕ должен иметь доступ):</b><br>

           $banforumoutput</td></tr><tr>~;

    }



Вот собственно и все :) Еще бы неплохо сделать поиск участников в Админцентре, которым запрещен доступ к тем или иным форумам. Но мне лень разбираться с тем кодом. Как будет необходимость - будет и поиск :)

Хак написан мною, естественно протестирован. Не бойтесь, что где то будет дырка в безопастности: мы же не открываем доступ, а наоборот запрещаем его. Так что беспокоиться не стоит. И не забывайте делать backup копии редактируемых файлов. Удачи.
<<Назад  Вперед>>Модератор: GramПечать
Объединенный Открытый Проект »   Русский IkonBoard »   Хаки для Ikonboard »   Бан для отдельного форума.
RSS
Быстрый переход в раздел:


Время выполнения скрипта: 0.0231. Количество выполненных запросов: 19, время выполнения запросов 0.0107