用户定制权限
更新时间: 2023/09/13 18:40:50
除了可以通过频道身份组对所有身份组成员在频道维度进行权限控制,也可以为单个频道成员专门定制权限,管控其在频道维度的操作。
用户定制权限定义
频道成员的定制权限由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:
监听圈组的系统通知。示例代码参见圈组系统通知收发。具体与用户定制权限相关的系统通知类型,见本文末尾的相关系统通知。
-
已创建服务器并创建频道。
实现方法
创建定制权限
调用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 |
更新“用户定制权限” |
该系统通知的接收条件,请参见服务端文档的身份组权限相关事件通知。