rcm/user

用户管理、认证和访问控制

1.6.0 2018-10-04 14:52 UTC

README

介绍

本模块的主要目标是提供一个简单且可配置的用户对象以及与用户存储、访问控制和认证相关的服务。

有关未来目标,请参阅 TODO.md。

功能

用户

用户类

用户类是该模块的主要用户实体。

用户类具有以下属性:

  • id

  • 一个唯一的标识符,默认情况下,它由 DbUserDataPreparer 在创建时生成。

  • username

  • 一个唯一的用户名。

  • password

  • 一个密码,默认情况下,它由 DbUserDataPreparer 在创建/更新时通过 Encryptor 进行哈希处理。

  • Auth UserAdapter 还使用相同的 Encryptor 进行密码认证。

  • state

  • 状态用于提供用户状态的标签。

  • 仅提供了一个状态('disabled'),其他状态可以根据需要创建和使用。

  • email

  • 一个电子邮件地址

  • 可以在配置中设置验证

  • 默认情况下,不要求它是唯一的

  • name

  • 一个显示名称

  • 可以在配置中设置验证

  • properties

  • 任意属性的聚合

  • 可以通过使用用户数据事件或属性事件的监听器将这些属性注入到用户对象中。

  • 如果提供自己的,也可以直接在数据映射器中注入。

默认情况下,为用户注入了一个 ACL 角色属性。该属性是本模块 ACL 所使用的属性。

RcmUserService

RcmUserService 是一个高级服务/外观,公开了许多用于操作用户对象的有用方法。

  • 开发人员可能需要经常使用的 PHP API
  • 基本的创建、读取、更新、删除方法
  • 按需访问 User->properties 的方法(仅当需要时填充的属性)
  • 用户认证方法(登录、注销、凭证检查)
  • 检查用户访问的方法(ACL)
  • 还提供了其他实用和有帮助的方法

当前用户服务

公开了一个简单的服务来获取当前用户

CurrentUser->get({如果没有用户则使用默认值}) 或 CurrentUser({如果没有用户则使用默认值})

数据方法
  • getUser(User $user)

  • 根据提供的 User 对象中的数据(User::id 和 User::username)从数据源返回一个用户

  • userExists(User $user)

  • 如果用户在数据源中存在,则返回 true

  • readUser(User $user, $includeResult = true)

  • 如果找到用户,则返回包含 User 对象的结果对象,如果没有找到,则返回 null。

  • 如果 $includeResult == false,则返回 User 对象或 null

  • createUser(User $user, $includeResult = true)

  • 如果成功创建用户,则返回包含 User 对象的结果对象

  • 如果 $includeResult == false,则返回 User 对象

  • updateUser(User $user, $includeResult = true)

  • 如果成功更新用户,则返回包含 User 对象的结果对象

  • 如果 $includeResult == false,则返回 User 对象

  • $user = {请求用户对象}

  • $includeResult = {如果为 true,将返回包含代码、消息和数据(User)的结果对象}

  • deleteUser(User $user, $includeResult = true)

  • 如果成功更新用户,则返回包含空 User 对象的结果对象

  • 如果 $includeResult == false,则返回 User 对象

  • $user = {请求用户对象}

  • $includeResult = {如果为 true,将返回包含代码、消息和数据(User)的结果对象}

  • getUserProperty(User $user, $propertyNameSpace, $default = null, $refresh = false)

  • 按需加载用户属性。通过事件填充User::property的一种方式。

  • 某些用户属性不会与用户一起加载以提高速度。使用此方法来加载这些属性。

  • $user = {请求用户对象}

  • $propertyNameSpace = {请求的属性的唯一ID}

  • $default = {如果未设置属性则返回的值}

  • $refresh = {将强制检索属性,即使它已经设置}

  • getCurrentUserProperty($propertyNameSpace, $default = null, $refresh = false)

  • 按需加载当前用户属性。通过事件填充User::property的一种方式。

  • 某些用户属性不会与用户一起加载以提高速度。使用此方法来加载这些属性。

  • $propertyNameSpace = {请求的属性的唯一ID}

  • $default = {如果未设置属性则返回的值}

  • $refresh = {将强制检索属性,即使它已经设置}

身份验证方法
  • validateCredentials(User $user)

  • 允许验证用户凭据(用户名和密码)而无需创建身份验证会话。

  • 有助于执行非登录身份验证检查。

  • $user = {请求用户对象}

  • authenticate(User $user)

  • 如果用户对象中提供的凭据有效,则创建身份验证会话(登录用户)。

  • $user = {请求用户对象}

  • clearIdentity()

  • 清除身份验证会话(注销用户)

  • hasIdentity()

  • 检查是否有任何用户已身份验证(登录)

  • isIdentity(User $user)

  • 检查请求的用户是否是当前身份验证会话中的用户

  • $user = {请求用户对象}

  • setIdentity(User $user)

  • 强制将用户放入身份验证会话。

  • $user = {请求用户对象}

  • 警告:这绕过了身份验证过程,应谨慎使用

  • refreshIdentity()

  • 将当前已身份验证的用户重新加载到身份验证会话中。

  • 是一种在不注销然后重新登录的情况下刷新会话用户的方式

  • getIdentity($default = null)

  • 从身份验证会话获取当前用户(登录用户)或如果没有用户身份验证,则返回$default

  • $default = {如果没有用户身份验证则返回此值}

基于访问控制层(ACL)的访问控制方法
  • isAllowed($resourceId, $privilege = null, $providerId = null)

  • 检查当前已身份验证的用户是否可以访问由提供者ID提供的具有特权的资源。

  • 这用于根据用户角色和ACL设置的规则验证用户的访问权限。

  • $resourceId = {由资源提供者定义的资源ID字符串(可能是另一个模块)}

  • $privilege = {要检查访问权限的资源的特权}

  • $providerId = {资源提供者和特权定义的唯一标识符}

  • isUserAllowed($resourceId, $privilege = null, $providerId = null, $user = null)

  • 检查请求的用户是否可以访问由提供者ID提供的具有特权的资源。

  • 这用于根据用户角色和ACL设置的规则验证用户的访问权限。

  • $resourceId = {由资源提供者定义的资源ID字符串(可能是另一个模块)}

  • $privilege = {要检查访问权限的资源的特权}

  • $providerId = {资源提供者和特权定义的唯一标识符}

  • $user = {请求用户对象}

基于角色的访问控制(RBA)方法
  • hasRoleBasedAccess($roleId)

  • 检查当前已身份验证的用户是否具有请求的角色或角色存在于角色层次结构中

  • 返回布尔值

  • hasUserRoleBasedAccess($user, $roleId)

  • 检查请求的用户是否具有请求的角色或角色存在于角色层次结构中

  • 返回布尔值

实用方法
  • buildNewUser()

  • 工厂方法,用于使用事件监听器中的默认值构建新的User对象

  • buildUser(User $user)

  • 使用事件监听器中的默认值填充用户

  • $user = {请求用户对象}

数据映射器

用户映射器是用于填充和存储用户数据的适配器。默认情况下,此模块使用Doctrine数据映射器。可以编写和配置任何数据映射器,以便根据需求存储数据。

注意:如果您决定编写自己的数据映射器,您可能会发现RcmUser/test/ImplementationTest中的实现测试(W.I.P.)很有帮助。实现测试不应在生产环境中运行,因为它会创建和销毁数据。

身份验证

此模块使用ZF2身份验证库。这要求它提供

  • AuthenticationService
  • 默认情况下,此模块使用未经修改的ZF2类。
  • 您可以根据需要注入自己的。
  • 适配器
  • 默认情况下,此模块使用其UserAdapter,它需要Encryptor和UserDataService。
  • 您可以根据需要注入自己的。
  • 存储
  • 默认情况下,此模块使用UserSession,它是一个具有$namespace = 'RcmUser'、$member = 'user'和默认会话容器的会话存储。

访问控制列表(ACL)

此模块将资源包裹在一个根架构中,并为存储角色和规则提供数据映射器。此模块还提供isAllowed服务的功能。

此模块还创建一些ACL资源,用于允许访问API和视图。

ProviderId

  • RcmUser

资源和权限

  • rcmuser

  • rcmuser-user-administration

    • 读取
    • 更新
    • 创建
    • 删除
    • 更新凭据
  • rcmuser-acl-administration

    • 读取
    • 更新
    • 创建
    • 删除

需求

  • php 5.5.*(未在更低版本上测试)
  • zendframework 2.2.x
  • rwoverdijk/assetmanager 1.*

基于配置可选

  • doctrine 2.x
  • mysql 5.6.x(未在更低版本上测试)

安装

手动安装

  • 从GitHub下载或克隆到您的ZF2骨架应用中
  • 配置模块
  • 运行install.sql(如有需要)

Composer安装

@future

配置

模块配置树

// @see config/dependencies.php
// @see config/rcm-user.php