Как использовать Zend_Auth для аутентификации пользователя при загрузке с помощью плагина ckeditor pgrfilemanager

Здравствуйте, добрые люди!

У меня есть веб-приложение (мое первое в своем роде), основанное на Zend Framework 1.11.12 (обновленное с 1.10.8), использующее структуру папок "модульный подход", я имею в виду, что все модули находятся под application/modules, я использовал Doctrine 1.2.4

я также использую library папка для всех сторонних библиотек, включая ZF, кроме 2: CKEditor а также PGRFilemanager, Менеджер pgrfile для загрузки файлов в папку с изображениями из панели администратора. Вот глобально моя файловая структура.

/application
    /configs
        application.ini
        routes.ini
    /layouts
        /scripts
            /partials
                  *.all_the_partials_files.phtml
            *.all_the_layouts.phtml
    /modules
         all_the_module_folders
    Boostrap.php
/logs
/library
    /Zend
    /Doctrine
    /SwiftMailer
    /Abra //where all my classes reside
        /Model
            User.php
            Role.php
            other_doctrine_entities_class
/public
    /javascript
    /css
    /images
        .htaccess // added an htaccess file here
    /fonts
    `/ckeditor`
        a_lot_of_files_including_php_files
        other_folders
        /plugins
            other_folders
            `/pgrfilemanager`
                /php
                    auth.php
                myconfig.php
                other_folders_and_files_including_php
    index.php
    .htaccess

В тот момент, когда я разрабатывал этот сайт, я не использовал Zend_Acl, поэтому session_start() в /public/ckeditor/plugins/pgrfilemanager/php/auth.php Некоторое время работал нормально, так как pgrfilemanager поставлялся с функцией аутентификации по умолчанию. но как только я начал использовать Zend_Acl, я столкнулся с такими проблемами, как Class __PHP_Incomplete_Class has no unserializer Array исключение, когда session_start() называется из ~~/auth.php файл. Я изначально думал, что это связано с тем фактом, что я не использовал Zend_Session но, видимо, я был скорее из-за этого факта объяснил здесь (поправьте меня, если я не прав, спасибо)

Как это использовать? Спасибо за прочтение

1 ответ

Решение

Так как я нашел обходной путь по этой проблеме, я подумал, что поделюсь, возможно, у меня будет лучшая перспектива.

Ответ для Class __PHP_Incomplete_Class has no unserializer Array теперь ясно, как сессия делает, какой формат unserialize чтобы смысл php должен был знать определение объекта, хранящегося в сеансе.

На основе структуры файла я создал файл аутентификации, скажем myauth.php в /public/ckeditor/puglins/pgrfilemanager/userfiles я буду ссылаться на этот путь pgr/userdir

$path = realpath("../../../../library");
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

require "Zend/Loader/Autoloader.php";

require_once 'Doctrine/Doctrine.php';
spl_autoload_register(array("Doctrine", "autoload"), true);
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace(array("Abra_"));
/*$p seem to be empty throwing error on Zend_Config_Ini but returns the config anyway.I never figured out
*/
$p = realpath("./../../../../application/configs/application.ini"); 
try {
    //     $config = parse_ini_file($p, "production");
    $config = new Zend_Config_Ini($p, "production");
    $conn = Doctrine_Manager::connection($config->doctrine->dsn);
    $user = new Abra_Model_User();
    $role = new Abra_Model_Role();
    $auth = Zend_Auth::getInstance();
    if(!$auth->hasIdentity()|| !in_array($auth->getIdentity()->Role->name,  array("superadmin","administrator")) ){
        die("Not authenticated");
    }
} catch (Exception $ex) {
*/
$p = realpath("./../../../../application/configs/application.ini"); 
try {
    //     $config = parse_ini_file($p, "production");
    $config = new Zend_Config_Ini($p, "production");
    $conn = Doctrine_Manager::connection($config->doctrine->dsn);
    $user = new Abra_Model_User();
    $role = new Abra_Model_Role();
    $auth = Zend_Auth::getInstance();
    if(!$auth->hasIdentity()|| !in_array($auth->getIdentity()->Role->name,  array("superadmin","administrator")) ){
        die("Not authenticated");
    }
} catch (Exception $ex) {

}

}

в pgr/php/folders.php а также pgr/php/files.php я включил

$path = realpath("../../../../library");
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

на вершине. тогда я включил pgr/userfiles/myauth.php в pgr/myconfig как показано ниже

include_once dirname(__FILE__) . '/userfiles/myauth.php';

Я надеюсь, что это поможет кому-то. Спасибо

Другие вопросы по тегам