管理员插件
管理员插件为应用程序中的用户管理提供了一系列管理功能。它允许管理员执行各种操作,如创建用户、管理用户角色、禁止/解禁用户、模拟用户身份等。
安装
使用方法
在执行任何管理操作之前,用户必须使用管理员账户进行认证。管理员是指被分配了admin
角色的任何用户,或者其ID包含在adminUserIds
选项中的任何用户。
创建用户
允许管理员创建新用户。
列出用户
允许管理员列出数据库中的所有用户。
默认情况下,返回100个用户。你可以使用以下查询参数调整限制和偏移:
search
:应用于用户的搜索查询。它可以是一个具有以下属性的对象:field
:要搜索的字段,可以是email
或name
。operator
:用于搜索的运算符。可以是contains
、starts_with
或ends_with
。value
:要搜索的值。
limit
:要返回的用户数量。offset
:要跳过的用户数量。sortBy
:按哪个字段对用户进行排序。sortDirection
:对用户进行排序的方向。默认为asc
。filter
:应用于用户的过滤器。它可以是对象数组。
分页
listUsers
函数通过返回用户列表旁边的元数据来支持分页。响应包括以下字段:
如何实现分页
要分页结果,请使用total
、limit
和offset
值计算:
- 总页数:
Math.ceil(total / limit)
- 当前页:
(offset / limit) + 1
- 下一页偏移量:
Math.min(offset + limit, (total - 1))
– 用作下一页的offset
的值,确保它不超过总页数。 - 上一页偏移量:
Math.max(0, offset - limit)
– 用作上一页的offset
的值(确保它不低于零)。
使用示例
每页10个用户获取第二页:
设置用户角色
更改用户的角色。
禁止用户
禁止用户,阻止他们登录并撤销所有现有会话。
解禁用户
移除用户的禁止状态,允许他们再次登录。
列出用户会话
列出用户的所有会话。
撤销用户会话
撤销用户的特定会话。
撤销用户的所有会话
撤销用户的所有会话。
模拟用户身份
此功能允许管理员创建一个模拟指定用户的会话。该会话将保持活动状态,直到浏览器会话结束或达到1小时。你可以通过设置impersonationSessionDuration
选项来更改此持续时间。
停止模拟用户身份
要停止模拟用户身份并继续使用管理员账户,你可以使用stopImpersonating
删除用户
从数据库中永久删除用户。
访问控制
管理员插件提供了一个高度灵活的访问控制系统,允许你根据用户角色管理用户权限。你可以定义自定义权限集以满足你的需求。
角色
默认情况下,有两个角色:
admin
:具有admin角色的用户对其他用户有完全控制权。
user
:具有user角色的用户对其他用户没有控制权。
一个用户可以有多个角色。多个角色以逗号(",")分隔存储为字符串。
权限
默认情况下,有两个资源,最多有六个权限。
user:
create
list
set-role
ban
impersonate
delete
set-password
session:
list
revoke
delete
具有admin角色的用户对所有资源和操作都有完全控制权。具有user角色的用户对任何这些操作都没有控制权。
自定义权限
该插件提供了一种简单的方法来为每个角色定义你自己的权限集。
创建访问控制
你首先需要通过调用createAccessControl
函数并传递statement对象来创建访问控制器。statement对象应该以资源名称为键,以操作数组为值。
创建角色
一旦你创建了访问控制器,你可以使用你定义的权限创建角色。
当你为现有角色创建自定义角色时,这些角色的预定义权限将被覆盖。要将现有权限添加到自定义角色,你需要导入defaultStatements
并将其与你的新语句合并,以及将角色的权限集与默认角色合并。
访问控制使用
检查权限:
要检查用户的权限,你可以使用客户端提供的hasPermission
函数。
如果你想在服务器端检查用户的权限,你可以使用api
提供的userHasPermission
操作来检查用户的权限。
检查角色权限:
一旦你定义了角色和权限,为了避免从服务器检查权限,你可以使用客户端提供的checkRolePermission
函数。
Schema
此插件向user
表添加以下字段:
Field Name | Type | Key | Description |
---|---|---|---|
role | string | 用户的角色。默认为`user`。管理员将具有`admin`角色。 | |
banned | boolean | 表示用户是否被禁止。 | |
banReason | string | 用户被禁止的原因。 | |
banExpires | number | 用户禁止将过期的Unix时间戳。 |
并在session
表中添加一个字段:
Field Name | Type | Key | Description |
---|---|---|---|
impersonatedBy | string | 正在模拟此会话的管理员的ID。 |
选项
默认角色
用户的默认角色。默认为user
。
管理员角色
被视为管理员角色的角色。默认为["admin"]
。
任何不在adminRoles
列表中的角色,即使他们有权限,也不会被视为管理员。
管理员用户ID
你可以传递一个应被视为管理员的用户ID数组。默认为[]
如果用户在adminUserIds
列表中,他们将能够执行任何管理员操作。
模拟会话持续时间
模拟会话的持续时间(以秒为单位)。默认为1小时。
默认禁止原因
由管理员创建的用户的默认禁止原因。默认为No reason
。
默认禁止过期时间
由管理员创建的用户的默认禁止过期时间(以秒为单位)。默认为undefined
(意味着禁止永不过期)。
被禁止用户消息
当被禁止的用户尝试登录时显示的消息。默认为"You have been banned from this application. Please contact support if you believe this is an error."