iOS

用户定制权限

更新时间: 2024/03/14 17:08: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类表示身份组权限信息,包含typestatus两个参数:
type NIMQChatServerMemberType 需要定制权限的成员的类型,包括NIMQChatServerMemberTypeCommon(普通成员)和NIMQChatServerMemberTypeOwner(服务器所有者)
joinTime NSTimeInterval 需要定制权限的用户被邀请后,加入服务器的时间
inviter NSString 邀请者的 IM 账号(accid

前提条件

实现方法

uml diagram

创建定制权限

调用addMemberRole:completion: 方法为某个成员创建定制权限。新创建的定制权限配置默认继承自频道身份组相应权限的配置。

调用该方法必须先拥有NIMQChatPermissionTypeManageRoleNIMQChatPermissionTypeManageChannel权限,且是该频道的成员。如果没有权限,调用该方法将返回 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)。

调用该方法必须先拥有NIMQChatPermissionTypeManageRoleNIMQChatPermissionTypeManageChannel 权限,且是该频道的成员。如果没有权限,调用该方法将返回 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 更新“用户定制权限”

该系统通知的接收条件,请参见服务端文档的身份组权限相关事件通知

此文档是否对你有帮助?
有帮助
去反馈
  • 用户定制权限定义
  • 前提条件
  • 实现方法
  • 创建定制权限
  • 删除定制权限
  • 修改定制权限
  • 相关参考
  • 相关系统通知