简介:
zfc是ZendFramework 2 标准模块外提供的公共库,即 Zend Framework Common,包含了一些常用的功能块,例如 user、rabc 等功能。
zfc-user:zfc中的用户功能,提供了基于数据库的用户鉴权、用户登录、注销等基本的功能。
zfc-user-doctrine-orm:为 zfc-user 提供 doctrine orm 模式的模块,能够使用户功能通过指定的用户实体(Entity)进行持久化存储。
BjyAuthorize :为 zfc-user 提供基于角色-用户(Role-User)的用户、权限管理模块,支持指定 doctrine orm 的用户、角色实体(Entity)。开发者可以指定和扩展自己的 User 、Role 类。
一、安装zfc-user-doctrine-orm 、bjy-authorize模块
1、安装这两个模块前必须安装并配置好 Doctrine ORM,具体步骤参考:ZendFramework 2 下安装和配置 Doctrine 2 的步骤
2、安装模块库
php composer.phar require zf-commons/zfc-user-doctrine-orm
php composer.phar require bjyoungblood/bjy-authorize:1.4.*
(注:如果已经配置好全局使用composer,注意更改前段的命令)
二、配置模块
修改:config/application/application.config.php
, 像下面这样:
'modules' => array( 'DoctrineModule', 'DoctrineORMModule', 'ZfcBase', 'ZfcUser', 'ZfcUserDoctrineORM',, 'BjyAuthorize', 'Application', ),
三、配置数据库
有两种方法,推荐第二种:
第一种:在MySql中执行以下SQL:
(原文件链接: ZfcUser SQL schema )
SQL:
CREATE TABLE `user` ( `user_id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `username` VARCHAR(255) DEFAULT NULL UNIQUE, `email` VARCHAR(255) DEFAULT NULL UNIQUE, `display_name` VARCHAR(50) DEFAULT NULL, `password` VARCHAR(128) NOT NULL, `state` SMALLINT UNSIGNED ) ENGINE=InnoDB CHARSET="utf8";
第二种:使用 doctrine-module
来配置:
1、尝试输出 SQL
vendor/bin/doctrine-module orm:schema-tool:update --dump-sql
如果是在win系统
vendorbindoctrine-module.bat orm:schema-tool:update --dump-sql
提示:如果你希望使用不同的表结构或者用户实体,你可以在 zfcuser 的config 文件 中设置参数 enable_default_entities(后文会有提到) 。
2、执行 ORM 数据库同步
如果上一条命令能够正确的输出数据库SQL命令,那么久表示设置好了,执行下面的命令同步数据库:
vendor/bin/doctrine-module orm:schema-tool:update --force
如果是在win系统
vendorbindoctrine-module.bat orm:schema-tool:update --force
你现在可以使用路由 /user 路由来访问zfc-user模块了
四、配置 BjyAuthorize
1、复制 BjyAuthorize 模块目录 data 下的文件 User.php.dist, Role.php.dist 到你自己的模块的 Entity 目录下。并分别更名为 User.php, Role.php。
修改文件 User.php、Role.php 的命名空间 namespace 你的模块名Entity
修改 User.php 文件中的 Role 字段的注释 targetEntity=”你的模块名EntityRole”
修改 Role.php 文件中的 parent字段的注释 targetEntity=”你的模块名EntityRole”,
2、在你自己的模块配置文件添加以下配置:
/* 部署 BjyAuthorize */ 'doctrine' => array( 'driver' => array( // overriding zfc-user-doctrine-orm's config 'zfcuser_entity' => array( 'class' => 'DoctrineORMMappingDriverAnnotationDriver', 'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity', ), ), 'orm_default' => array( 'drivers' => array( __NAMESPACE__ . 'Entity' => 'zfcuser_entity' ), ), ), ), 'zfcuser' => array( // telling ZfcUser to use our own class 'user_entity_class' => __NAMESPACE__.'EntityUser', // telling ZfcUserDoctrineORM to skip the entities it defines 'enable_default_entities' => false, ), 'bjyauthorize' => array( // Using the authentication identity provider, which basically reads the roles from the auth service's identity 'identity_provider' => 'BjyAuthorizeProviderIdentityAuthenticationIdentityProvider', 'role_providers' => array( // using an object repository (entity repository) to load all roles into our ACL 'BjyAuthorizeProviderRoleObjectRepositoryProvider' => array( 'object_manager' => 'doctrine.entitymanager.orm_default', 'role_entity_class' => __NAMESPACE__.'EntityRole', ), ), )
3、同步数据库
vendor/bin/doctrine-module orm:schema-tool:update --force
4、添加角色数据到数据库(根据需要修改)
INSERT INTO `role` (`id`, `parent_id`, `roleId`) VALUES (1, NULL, 'guest'), (2, 1, 'user'), (3, 2, 'moderator'), (4, 3, 'administrator');
五、使用路由 /user 访问网站
注册和使用用户
如果需要调整用户的角色,需要手工调整数据表 user_role_linker