reliv/rcm-user

用户管理,认证和ACL

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 Service

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

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

数据方法
  • getUser(User $user)

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

  • userExists(User $user)

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 返回一个包含空User对象的Result对象,如果用户更新成功,则显示成功消息。

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

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

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

  • 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对象中提供的凭据有效,则创建身份验证会话(登录用户)。

  • $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