Как использовать 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';
Я надеюсь, что это поможет кому-то. Спасибо