Правильная интеграция KFM (Kae’s File Manager) с Yii

28 сентября 2011

Правильная интеграция KFM (Kae’s File Manager) с Yii

Для того, чтобы файловым менеджером KFM, который предназначен только для администраторского раздела сайта, не могли воспользоваться любые случайные посетители сайта, его нужно каким-либо образом привязать к аутентификации из Yii. Если пользователь аутентифицирован в системе управления Yii-сайтом, то он может использовать KFM и производить манипуляции с файлами на сервере, а в противном случае — нет.

Самым простым способом такой интеграции является способ, описанный в данной заметке.

Для начала нужно создать новое действие actionIsAuthenticated в основном контроллере приложения управления сайтом:

class SiteController extends BackendController
{
    // фильтры контроллера
    public function filters()
    {
        return array(
            'accessControl',
            'postOnly + logout',
        );
    }
 
    // настраиваем права доступа к действиям контроллера
    public function accessRules()
    {
        return array(
            // isAuthenticated доступен всегда и всем
            array('allow', 'actions'=>array('isAuthenticated'), 'users'=>array('*')),
 
            // страница логина доступна только не аутентифицированным пользователям
            array('allow', 'actions'=>array('login'), 'users'=>array('?')),
            array('deny', 'actions'=>array('login'), 'users'=>array('*')),
 
            // остальные действия по умолчанию доступы только аутентифицированным пользователям
            array('allow', 'users'=>array('@')),
            array('deny', 'users'=>array('*')),
        );
    }
 
    // главная страница системы управления
    public function actionIndex()
    {
        $this->render('index');
    }
 
    // ...
 
    // выход из системы управления сайтом
    // доступен только по HTTP POST
    public function actionLogout()
    {
        Yii::app()->user->logout();
        $this->render('logout');
    }
 
    // возвращает статус аутентификации пользователя
    public function actionIsAuthenticated()
    {
        $this->layout='';
        echo Yii::app()->user->isGuest ? 'no' : 'yes';
    }
}

Теперь открываем и редактируем конфигурационный файл KFM configuration.php. Нужно добавить следующий код в самом начале этого файла:

$curl=curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://'.$_SERVER['HTTP_HOST'].'/backend/site/isAuthenticated');
curl_setopt($curl, CURLOPT_RETURNTRANSFER , 1);
curl_setopt($curl, CURLOPT_COOKIE , 'PHPSESSID='.$_COOKIE['PHPSESSID']);
$status=curl_exec($curl);
if(curl_errno($curl))
    $status='';
curl_close($curl);
 
if($status!='yes')
    die;

Основная идея заключается в том, что мы запрашиваем статус аутентификации пользователя передавая серверу посредством CURL его идентификатор сессии.