用户定制权限
更新时间: 2024/11/21 15:44:36
除了可以通过频道身份组对所有身份组成员在频道维度进行权限控制,也可以为单个频道成员专门定制权限,管控其在频道维度的操作。
用户定制权限定义
频道成员的定制权限由NIMQChatMemberRole
接口定义。该接口的内置方法如下:
参数 | 类型 | 说明 |
---|---|---|
roleId |
unsigned long long | 定制权限 ID |
serverId |
unsigned long long | 身份组所属服务器的 ID |
accid |
unsigned long long | 需要定制权限的用户的 IM 账号 ID |
channelId |
unsigned long long | 频道 ID |
nick |
NSString | 需要定制权限的成员在服务器的昵称 |
avatar |
NSString | 需要定制权限的成员在服务器的头像 |
custom |
NSString | 定制权限的自定义字段 |
auths |
NSArray<NIMQChatPermissionStatusInfo*> | NIMQChatPermissionStatusInfo 类表示身份组权限信息,包含type 和status 两个参数:
|
type |
NIMQChatServerMemberType |
需要定制权限的成员的类型,包括NIMQChatServerMemberTypeCommon (普通成员)和NIMQChatServerMemberTypeOwner (服务器所有者) |
joinTime |
NSTimeInterval | 需要定制权限的用户被邀请后,加入服务器的时间 |
inviter |
NSString | 邀请者的 IM 账号(accid ) |
前提条件
-
已注册
onRecvSystemNotification:
监听圈组的系统通知。示例代码参见圈组系统通知收发。具体与用户定制权限相关的系统通知类型,见本文末尾的相关系统通知。
-
已创建服务器并创建频道。
实现方法
sequenceDiagram
note over QChat 实例: 初始化与登录
note over QChat 实例: 用户A 授予用户B 服务器维度的权限
用户A ->> QChat 实例: 创建服务器
用户A ->> QChat 实例: 创建服务器身份组
用户A ->> QChat 实例: 修改服务器身份组
note over 用户A: 修改时将需要授予给用户B 的权限开启
用户A ->> QChat 实例: 邀请用户B 加入服务器
用户B ->> QChat 实例: 接受邀请加入服务器
note over 用户B: 用户B 需先加入服务器<br>才能被加为身份组成员
用户A ->> QChat 实例: 将用户B 加入服务器身份组
note over 用户A: 用户B 加入身份组后,获得权限
note over QChat 实例: 用户B 可访问用户A 创建的频道
用户A ->> QChat 实例: 在服务器内创建频道
note over 用户A: 用户B 在以下两种情况下可访问频道(即成为频道成员):<br>1. 创建的是公开频道,且用户B 未被加入频道黑名单<br>2. 创建的私密频道,且用户B 被加入频道白名单
note over QChat 实例: 用户A 为用户B 设置定制权限
用户A ->> QChat 实例: 创建定制权限
note over 用户A: 本时序图场景下,新创建的定制权限,<br>默认继承用户B 已属于的服务器身份组;<br>如果用户B 已成为某频道身份组成员,则继承该频道身份组
用户A ->> QChat 实例: 修改定制权限
用户A ->> QChat 实例: 删除定制权限
创建定制权限
调用addMemberRole:completion:
方法为某个成员创建定制权限。
调用该方法必须先拥有NIMQChatPermissionTypeManageRole
和NIMQChatPermissionTypeManageChannel
权限,且是该频道的成员。如果没有权限,调用该方法将返回 403
错误码。
-
API 原型
- (void)addMemberRole:(NIMQChatAddMemberRoleParam *)param completion:(nullable NIMQChatAddMemberRoleHandler)completion;
-
示例代码
id<NIMQChatRoleManager> qchatRoleManager = [[NIMSDK sharedSDK] qchatRoleManager]; NIMQChatAddMemberRoleParam *param = [[NIMQChatAddMemberRoleParam alloc] init]; param.serverId = 123456; param.channelId = 121212; param.accid = @"yunxin1"; [qchatRoleManager addMemberRole:param completion:^(NSError *__nullable error, NIMQChatMemberRole *__nullable result) { // your code }];
删除定制权限
调用removeMemberRole:completion:
方法可将某人的定制权限删除。
该方法的入参结构为NIMQChatRemoveMemberRoleParam
,需要传入所属的服务器 ID、频道 ID、目标成员的 IM 账号(accid
)。
调用该方法必须先拥有NIMQChatPermissionTypeManageRole
和NIMQChatPermissionTypeManageChannel
权限,且是该频道的成员。如果没有权限,调用该方法将返回 403
错误码。
-
API 原型
- (void)removeMemberRole:(NIMQChatRemoveMemberRoleParam *)param completion:(nullable NIMQChatRemoveMemberRoleHandler)completion;
-
示例代码
id<NIMQChatRoleManager> qchatRoleManager = [[NIMSDK sharedSDK] qchatRoleManager]; NIMQChatRemoveMemberRoleParam *param = [[NIMQChatRemoveMemberRoleParam alloc] init]; param.serverId = 123456; param.channelId = 121212; param.accid = @"yunxin1"; [qchatRoleManager removeMemberRole:param completion:^(NSError *__nullable error) { // your code }];
修改定制权限
调用updateChannelRole:completion:
可修改某成员的定制权限。
该方法的入参结构为NIMQChatUpdateMemberRoleParam
,需要传入所属的服务器 ID、频道 ID、目标成员的 IM 账号(accid
)和需更新的权限数组。
- 调用该方法必须先拥有
NIMQChatPermissionTypeManageRole
权限。如果没有该权限,调用该方法将返回403
错误码。 - 用户无法配置自己没有的权限。例如用户没有权限A,则无法修改权限A 的配置。
-
API 原型
- (void)updateMemberRole:(NIMQChatUpdateMemberRoleParam *)param completion:(nullable NIMQChatUpdateMemberRoleHandler)completion;
-
示例代码
id<NIMQChatRoleManager> qchatRoleManager = [[NIMSDK sharedSDK] qchatRoleManager]; NIMQChatUpdateMemberRoleParam *param = [[NIMQChatUpdateMemberRoleParam alloc] init]; param.serverId = 123456; param.channelId = 121212; param.accid = @"yunxin1"; NIMQChatPermissionStatusInfo *info = [[NIMQChatPermissionStatusInfo alloc] init]; info.type = NIMQChatPermissionTypeRemindOther; info.status = NIMQChatPermissionStatusExtend; param.commands = @[info]; [qchatRoleManager updateMemberRole:param completion:^(NSError *__nullable error, NIMQChatMemberRole *__nullable result) { // your code }];
相关参考
相关系统通知
圈组系统通知的类型在NIMQChatSystemNotificationType
枚举中定义,与用户定制权限相关的内置系统通知类型如下:
枚举值 | 说明 |
---|---|
NIMQChatSystemNotificationTypeMemberRoleAuthUpdate |
更新“用户定制权限” |
该系统通知的接收条件,请参见服务端文档的身份组权限相关事件通知。