用户定制权限
更新时间: 2024/05/22 16:20:30
除了可以通过频道身份组对所有身份组成员在频道维度进行权限控制,也可以为某个频道成员专门定制权限,管控其在频道维度的操作。
用户定制权限定义
用户定制权限由QChatMemberRole
类定义。该类的成员参数如下:
点击展开查看 QChatMemberRole 的参数
方法 | 类型 | 说明 |
---|---|---|
serverId |
int | 身份组所属服务器的 ID |
id |
int | 定制权限 ID |
accid |
String | 需要定制权限的用户的 IM 账号 (accid ) |
channelId |
int | 身份组所属的频道的 ID |
nick |
int | 需要定制权限的成员在服务器的昵称 |
avatar |
String | 需要定制权限的成员在服务器的头像 URL |
custom |
String | 自定义字段 |
resourceAuths |
Map<QChatRoleResource , QChatRoleOption > |
身份组的权限列表,其中:
|
type |
QChatMemberType |
成员类型 |
createTime |
int | 创建时间 |
updateTime |
int | 更新时间 |
jointime |
int | 成员加入服务器的时间 |
inviter |
String | 邀请该成员的用户的 IM 账号(accid ) |
前提条件
-
已注册
onReceiveSystemNotification
事件流,监听系统通知的接收。示例代码参见接收圈组内置系统通知。具体用户定制权限相关的系统通知类型,见本文末尾的相关系统通知。
-
已创建服务器并已创建服务器身份组。
实现方法
以下时序图可能因为网络问题显示异常。如显示异常,一般刷新当前页面即可正常显示。
创建定制权限
调用addMemberRole
方法为某个成员创建定制权限。
调用该方法必须先拥有QChatRoleResource.manageRole
和QChatRoleResource.manageChannel
权限,且是该频道的成员。如果没有权限,调用该方法将返回 403
错误码。
- 示例代码
dart
final channel = getChannel(); final param = QChatAddMemberRoleParam(channel.serverId, channel.channelId, accId); NimCore.instance.qChatRoleService.addMemberRole(param).then((value) { if (value.isSuccess) { // 操作成功,返回添加成功的成员定制权限 var role = value.data?.role; } else { // 操作失败 } });
修改定制权限
调用updateMemberRole
可修改某成员的定制权限。
该方法的入参结构为QChatUpdateMemberRoleParam
,需要传入所属的服务器 ID、频道 ID、目标成员的 IM 账号(accid
)和需更新的权限 Map。
- 调用该方法必须先拥有
QChatRoleResource.manageRole
权限。如果没有该权限,调用该方法将返回403
错误码。 - 用户无法配置自己没有的权限。例如用户没有权限A,则无法修改权限A 的配置。
- 示例代码
dart
final memberRole = getMemberRole(); final resourceAuths = <QChatRoleResource, QChatRoleOption>{} ..[QChatRoleResource.deleteMsg] = QChatRoleOption.allow; final param = QChatUpdateMemberRoleParam(memberRole.serverId, memberRole.channelId, accId,resourceAuths); NimCore.instance.qChatRoleService.updateMemberRole(param).then((value) { if (value.isSuccess) { // 操作成功,返回修改后的成员定制权限 var role = value.data?.role; } else { // 操作失败 } });
删除定制权限
调用removeMemberRole
方法可将某人的定制权限删除。
该方法的入参结构为QChatRemoveMemberRoleParam
,需要传入所属的服务器 ID、频道 ID、目标成员的 IM 账号(accid
)。
调用该方法必须先拥有manageRole
和manageChannel
权限,且是该频道的成员。如果没有权限,调用该方法将返回 403
错误码。
-
示例代码
dart
final channel = getChannel(); final param = QChatRemoveMemberRoleParam(channel.serverId, channel.channelId, accId); NimCore.instance.qChatRoleService.removeMemberRole(param).then((value) { if (value.isSuccess) { // 操作成功 } else { // 操作失败 } });
查询定制权限
SDK 提供多个查询用户定制权限的方法,具体请参见用户定制权限相关查询。
相关参考
相关系统通知
圈组系统通知的类型在QChatSystemNotificationType
枚举中定义,与频道身份组相关的内置系统通知类型如下:
枚举值 | 说明 |
---|---|
member_role_auth_update |
更新“用户定制权限” |
该系统通知的接收条件,请参见服务端文档的身份组权限相关事件通知。
API 参考
API |
说明 |
---|---|
addMemberRole |
为频道下某人定制权限 |
updateMemberRole |
修改频道下某成员的定制权限 |
removeMemberRole |
删除某人的定制权限 |
更多相关方法, 请参见QChatRoleService
。