Главное меню
все форумы все темы форума добавить тему
Как закрыть сайт?
Собственно, данный вопрос появился в последнее время уже несколько раз. Несмотря на то, что решение совсем простое и лежит на поверхности, видимо, оно и отпугивает своей слишком большой простотой.
 
Итак, задачи такие:
1. закрыть сайт на время проведения работ
2. сделать "закрытый" сайт, на который имеют доступ только зарегистрированные пользователи.
3. разрешить доступ на сайт только определенным группам (например, тестерам)
 
Собственно, все три задачки решались достаточно просто по отдельности, но я решил сделать универсальный способ. Заодно и показать еще раз простоту написания модулей
 
Итак, будем писать модуль, который будет решать все озвученные задачи.
index.php
PHP
<?php
 //если у группы нет доступа
if (!access('access')
        //и пользователь не обращается к модулю авторизации
        && LabCMS::i()->url!=getModulePath(LabConfig::$cfg['auth_module']))
                //требуем авторизоваться или говорим что доступ запрещен
                LabCMS::i()->error403();

Собственно, модуль готов. Осталось создать для него корректный config.xml, чтобы можно было его устанавливать и настраивать.
 
config.xml
XML
<module>
        <name>закрытый сайт</name>
        <describe>Ограничивает доступ на сайт для всех, кроме указанных групп</describe>
        <component>0</component>
        <!-- модуль статичный, чтобы его действие распространялось на все страницы -->
        <static>1</static>
        <!-- ставим число поменьше, чтобы модуль подключался раньше других -->
        <runlevel>90</runlevel>
        <access>
                <permis>
                        <name>access</name>
                        <type>boolean</type>
                        <title>Доступ</title>
                        <describe>Эта группа имеет доступ на сайт</describe>
                </permis>
        </access>
</module>

 
Собственно и все. Устанавливаем модуль, подключаем его к корневому элементу сайта и даем права доступа выбранным группам.
Собственно, что может не понравиться: то что сайт при попытке просмотра зарегистрированным пользователем, не имеющим прав, будет ему об этом честно сообщать. А хотелось быть чтобы он вместо надписи "доступ запрещен" видел какую-то красивую страничку, с надписью о том, что на сайте работы (или нашествие инопланетян, или затопили соседи сверху).
 
PHP
<?php
 //если у группы нет доступа
if (!access('access')
  //и пользователь не обращается к модулю авторизации
  && LabCMS::i()->url!=getModulePath(LabConfig::$cfg['auth_module']))
  {
    //выводим наш красивый шаблон
    LabCMS::i()->setModuleTemplate('my_template.tpl');
    //указываем движку что все остальные модули обрабатывать не надо
    LabVars::$break=true;
    //если не хотим чтобы наш шаблон был вписан в дизайн сайта,
    //можно вывести только его
    LabVars::$template='blank.tpl';
  }