简介:
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、安装模块库
zfc-user-doctrine-orm:
php composer.phar require zf-commons/zfc-user-doctrine-orm
bjy-authorize:
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