mothership-ec / cog-user
Cog模块,用于非常基本且可扩展的用户系统
Requires
- php: >=5.4.0
- mothership-ec/cog: ~4.0
- dev-develop
- 2.2.0
- 2.1.0
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.0
- 1.1.0
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-master
- dev-user-titles
- dev-feature/clean-up-user-session-loading
- dev-feature/dispatch-event-on-create
- dev-feature/event-on-user-creation
- dev-feature/create-user-task
- dev-feature/multiple-currencies
- dev-feature/fix-premature-session-start
- dev-issues/new-user-id
- dev-ux/improvements
- dev-log-in-helper
This package is not auto-updated.
Last update: 2021-03-22 11:06:27 UTC
README
Message\User
cogule提供简单的用户和权限系统。
服务
待做:列出此处定义的服务
事件
以下事件由此cogule触发。事件对象始终是Message\User\Event\Event
的实例。
- user.login.attempt:当尝试登录时触发(只有通过基本验证时),无论用户是否存在。此事件是
Message\User\Event\LoginAttemptEvent
的实例。 - user.login:当用户成功登录时触发。
- user.logout:当用户成功登出时触发。
- user.password.request:当请求重置密码时触发,只有当用户存在时。
- user.password.reset:当用户成功重置密码时触发。
- 注意,如果通过“忘记密码”系统重置密码,则在触发此事件后,用户会登录,然后触发user.login事件。
- user.create:使用
Message\User\Create
装饰器创建用户时触发。 - user.edit:使用
Message\User\Edit
装饰器编辑用户时触发。- 以下情况下不会触发此事件:
- 更新或清除“密码请求时间”。
- 更新“最后登录时间”。
- 将用户添加到或从组中删除。
- 以下情况下不会触发此事件:
- user.email_confirmed:当用户确认他们的电子邮件地址(如果需要)时触发。
- user.group.add:使用
Message\User\Edit::addToGroup()
将用户添加到组时触发。 - user.group.remove:使用
Message\User\Edit::removeFromGroup()
从组中删除用户时触发。
用户
用户具有以下属性
- 一个ID
- 一个电子邮件地址
- 一个“电子邮件已确认”标志
- 一个头衔(例如先生或女士)
- 一个名
- 一个姓
- 一个“最后登录”时间戳
- 一个“请求密码时间”时间戳
以及创建和更新的常规元数据。删除时没有元数据,因为当用户被删除时,他们是硬删除的:他们在数据库中不再存在。
如果您的应用程序或模块需要向用户添加更多属性,建议以有意义的方式分组这些属性,并创建一个新的模型来表示这些属性组。Message\User\User
对象应该保持为基本用户信息的简单表示。
例如,在一个电子商务模块中,可能会为用户存储地址数据。在这种情况下,创建一个表示用户地址的模型会很有意义,如下所示
class UserAddress
{
public $user;
public $typeID;
public $addressLines;
public $town;
public $postcode;
public $countryID;
public $stateID;
public $telephone;
}
组
用户组当然是一种简单的用户分组方式。`Message\User` 模块本身不定义任何组,但它提供了组功能和一个框架,以便其他模块可以定义自己的组。
要定义一个组,首先需要创建一个实现了 `Message\User\Group\GroupInterface` 接口的类。
<?php
namespace Message\MyModule;
use Message\User\Group;
class SuperAdmin implements Group\GroupInterface
{
/**
* {@inheritdoc}
*/
public function getName()
{
return 'super-admin';
}
/**
* {@inheritdoc}
*/
public function getDisplayName()
{
return 'Super Administrators';
}
/**
* {@inheritdoc}
*/
public function getDescription()
{
return 'Users with access to everything!';
}
/**
* {@inheritdoc}
*/
public function registerPermissions(Group\Permissions $permissions)
{
// ...
}
}
然后只需将其添加到 `user.groups` 服务定义中,这是一个系统可用的用户组集合。未添加到此集合中的用户组对系统来说是“未知”的。
理想情况下,应在 `modules.load.success` 事件上添加组到集合中。在你的模块事件引导中添加如下的事件监听器:
$dispatcher->addListener('modules.load.success', function() use ($services) {
$services['user.groups']
->add(new Message\MyModule\SuperAdmin);
});
权限
此模块包含了一个简单的权限系统,它围绕用户组和路由集合或路由构建。
每个组都必须实现 `Message\User\Group\GroupInterface` 接口中定义的 `registerPermissions()` 方法。传递给此方法的参数是 `Message\User\Group\Permissions` 类的实例,适用于相应的组。
在 `registerPermissions()` 内部,可以为组注册一组权限。组可以授予以下权限之一:
- 特定路由集合中的所有路由。
- 特定的路由。
- 具有特定参数值的特定路由。
以下是所有三种情况的示例:
public function registerPermissions(Permissions $permissions)
{
// Grants the group access to all routes in the 'my.collection' route collection
$permissions
->addRouteCollection('my.collection');
// Grants the group access to the `homepage` and `secret.page` route
$permissions
->addRoute('homepage')
->addRoute('secret.page');
// Grants the group access to the `file.view` route only when the `type` parameter equals "image"
$permissions
->addRoute('file.view', array('type' => 'image'));
}
一旦任何组为路由或路由集合定义了权限,该路由或路由集合就变为“受保护”状态,除非当前用户所在的组有权访问该路由集合或特定路由,否则不可用。
如果当前用户没有访问受保护路由的适当权限,则会抛出 `Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
`。
控制器 & 路由
待办事项:撰写关于可用控制器和路由,以及如何在应用程序中使用它们的说明。