protected/modules/yupe/filters/YBackAccessControl.php

Summary

Maintainability
A
25 mins
Test Coverage
<?php
/**
 * YBackAccessControl фильтр, контролирующий доступ в панель управления
 *
 * @author yupe team <support@yupe.ru>
 * @link https://yupe.ru
 * @copyright 2009-2013 amyLabs && Yupe! team
 * @package yupe.modules.user.filters
 * @since 0.1
 *
 */
namespace yupe\filters;

use CAccessControlFilter;
use CHttpException;
use Yii;
use yupe\components\WebModule;

/**
 * Class YBackAccessControl
 * @package yupe\filters
 */
class YBackAccessControl extends CAccessControlFilter
{
    /**
     * @param \CFilterChain $filterChain
     * @return bool
     * @throws CHttpException
     */
    public function preFilter($filterChain)
    {
        $ips = $filterChain->controller->yupe->getAllowedIp();

        if (!empty($ips) && !in_array(Yii::app()->getRequest()->getUserHostAddress(), $ips)) {
            throw new CHttpException(404);
        }

        Yii::app()->getUser()->loginUrl = ['/user/account/backendlogin'];

        if (Yii::app()->getUser()->isGuest) {
            if ($filterChain->controller->yupe->hidePanelUrls == WebModule::CHOICE_YES) {
                throw new CHttpException(404);
            }
            Yii::app()->getUser()->setReturnUrl(Yii::app()->getRequest()->getUrl());
            $filterChain->controller->redirect(['/user/account/backendlogin']);
        }

        if (Yii::app()->getUser()->isSuperUser()) {
            return true;
        }

        // если пользователь авторизован, но не администратор, перекинем его на страницу для разлогиневшегося пользователя
        $filterChain->controller->redirect(Yii::app()->createAbsoluteUrl(Yii::app()->getModule('user')->logoutSuccess));
    }
}