Ярлыки

.htaccess (4) тестирование (8) шаблоны проектирования (3) css (5) Debian (6) docker (2) Doctrine2 (6) Git (6) html (4) java (6) javascript (13) jquery (11) LFS (3) linux (23) mac os (4) mod_rewrite (2) MSSQL (4) MySQL (18) ORM Doctrine (17) patterns (3) PDO (3) perl (7) PHP (64) PHPUnit (8) Python (15) SEO (2) Silex (1) SimpleXML (1) SQL (14) ssh (4) Ubuntu (24) Yii1 (1) Zend Framework (19) ZendFramework2 (8)

понедельник, 19 августа 2013 г.

ZendFramework2. Собственный модуль авторизации и ACL, объединяющий ZfcUser, BjuAuthorize, Doctrine2.

Я опущу установку приложения Zend Framework 2 и установку модулей ZfcUser, BjuAuthorize, Doctrine2. Перейдем сразу к созданию собственного модуля.

Создаем структуру модуля

/module/MyUser
    /config
        doctrineconnection.local.php.dist
        module.config.php
    /src
        /MyUser
            /Entity
                Role.php
                User.php
    Module.php
Добавляем модуль в /config/application.config.php.

doctrineconnection.local.php.dist настройки подключения Doctrine, нужен только если они не указаны где-то за пределами модуля. Как правило настройки уже присутствуют в каталоге /config/autoload приложения.

return array(
    'doctrine' => array(
        'connection' => array(
            'orm_default' => array(
                'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
                'params'      => array(
                    'host'     => '127.0.0.1',
                    'port'     => '3306',
                    'user'     => 'dbuser',
                    'password' => '',
                    'dbname'   => 'mydb'
                )
            )
        )
    )
);
MyUser/Module.php
class Module {
    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }

    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                ),
            ),
        );
    }
}
MyUser/config/module.config.php
return array(
    'doctrine' => array(
        'driver' => array(
            // перектрываем настройки zfc-user-doctrine-orm
            // используем AnnotationDriver
            // и указываем путь к каталогу с классами модели
            'zfcuser_entity' => array(
                'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                'paths' => __DIR__ . '/../src/MyUser/Entity',
            ),

            'orm_default' => array(
                'drivers' => array(
                    'MyUser\Entity' => 'zfcuser_entity',
                ),
            ),
        ),
    ),

    'zfcuser' => array(
        // указываем, что ZfcUser должен использовать наш класс пользователя
        'user_entity_class'       => 'MyUser\Entity\User',
        // указываем ZfcUserDoctrineORM игнорировать сущности по-умолчанию
        'enable_default_entities' => false,
    ),

    'bjyauthorize' => array(
        // Using the authentication identity provider, 
        // which basically reads the roles from the auth service's identity
        'identity_provider' => 
            'BjyAuthorize\Provider\Identity\AuthenticationIdentityProvider',

        'role_providers' => array(
            // используем репозиторий объектов
            // для загрузки ролей в ACL
            'BjyAuthorize\Provider\Role\ObjectRepositoryProvider' => array(
                'object_manager'    => 'doctrine.entity_manager.orm_default',
                // указываем наш класс для ролей
                'role_entity_class' => 'MyUser\Entity\Role', 
            ),
        ),
    ),
);

Создаем классы User и Role

Проще всего скопировать шаблоны классов из модуля bjy-authorize
 /vendor/bjyoungblood/bjy-authorize/data/Role.php.dist
 в
 /module/MyUser/src/MyUser/Entity/Role.php
и
 /vendor/bjyoungblood/bjy-authorize/data/User.php.dist
в /module/MyUser/src/MyUser/Entity/User.php
в этим классах везде меняем пространство имен на наше
Mynamespace на MyUser\Entity

Проверяем

> vendor/bin/doctrine-module orm:validate-schema
[Mapping]  OK - ...
[Database] FAIL - .....
Схема модели работает, осталось обновить базу данных (точнее создать таблицы)
> vendor/bin/doctrine-module orm:schema-tool:update --force
Updateing database schema...
Database schema updated successfully! "6" queries were executed
Теперь в базе данных имеем три таблицы
    role
    users
    users_roles
Добавляем роли в таблицу
INSERT INTO `role` 
    (`id`, `parent_id`, `roleId`) 
VALUES
    (1, NULL, 'guest'),
    (2, 1, 'user'),
    (3, 2, 'moderator'), 
    (4, 3, 'administrator');

Комментариев нет:

Отправить комментарий