tencent cloud

文档反馈

Android&iOS&Windows&Mac

最后更新时间:2024-07-05 18:11:36

    功能描述

    权限组可以根据用户实际使用需求自定义群组的使用权限,通过在不同的权限组配置不同的权限以及成员,来实现分组分权限管理群组。社群可使用权限组来管理,相比于职责固定的 管理员 的管理,权限组的管理则更加灵活,能够适用于社群成员较多、话题较多的场景。
    说明:
    权限组功能在 7.8 及以上版本支持。
    需要 购买进阶版, 登录 控制台 并开启社群开关后方可使用,开关路径:Applications > Your App > Chat > Configuration > Group Configuration > Community。
    
    
    
    权限组 V2TIMPermissionGroupInfo 包含三要素:社群权限 groupPermission、话题权限 topicPermission、拥有该权限的群成员。如上图所示,不同的权限组可以配置不同的社群权限 groupPermission 和话题权限 topicPermission,并通过添加不同的群成员来实现差异化权限管理。在社群资料 V2TIMGroupInfo 和话题资料 V2TIMTopicInfo 中还可分别设置社群的默认权限和话题的默认权限 defaultPermissions,并且所有群成员都拥有该默认权限。权限组管理规则如下:
    开启权限组功能 需要设置 enablePermissionGrouptrue,此时 管理员 的能力就失效了,相当于普通群成员;相反设置为 false后,权限组管理功能失效,恢复 管理员 的能力。
    在社群资料 V2TIMGroupInfo 和话题资料 V2TIMTopicInfo 中会自动创建默认的社群权限 defaultPermissions 和话题权限 defaultPermissions,针对所有群成员 everyone 生效(群主除外)。
    权限组 V2TIMPermissionGroupInfo 中的社群权限 groupPermission 可以在 创建权限组 时设置,也可以后续再修改。权限组中的话题权限 topicPermission 需要通过接口 addTopicPermissionToPermissionGroup 添加到权限组中。权限组的社群权限和话题权限只对权限组中的成员有效。
    权限是用 64 位的值来表示,每一位代表一个权限。某一位的值为 0 代表该权限是关闭的,值为 1 代表该权限是打开的。社群和话题权限位对照表如下,例如设置权限组的社群权限值为 5(二进制的 101),那么在权限组中的成员就拥有修改群资料权限和管理权限组资料权限。
    某群成员拥有的权限为默认的 everyone 权限和所在多个权限组中的权限取并集,即只要在一个地方该权限是打开的就有该权限。
    群主始终拥有所有的权限。
    分类
    来源
    说明
    社群默认的权限
    社群资料 V2TIMGroupInfo 中的 defaultPermissions
    所有社群成员 everyone 的默认权限
    群主和拥有修改群资料权限的群成员可以修改
    话题默认的权限
    话题资料 V2TIMTopicInfo 中的 defaultPermissions
    所有社群成员 everyone 在该话题的默认权限
    群主和拥有过管理该话题权限的群成员可以修改
    权限组的社群权限
    权限组 V2TIMPermissionGroupInfo 中的 groupPermission
    群主和有管理权限组资料权限的群成员可以修改
    权限组的话题权限
    通过接口 addTopicPermissionToPermissionGrouptopicPermission 添加到 权限组 V2TIMPermissionGroupInfo
    群主和有管理权限组资料权限的群成员可以修改
    
    社群和话题的权限位对照表如下:
    
    分类
    第 几 位
    名称
    含义
    社群权限
    第 0 位
    V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO
    修改群资料权限
    第 1 位
    V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER
    群成员管理权限,包含踢人,进群审核、修改成员资料等
    第 2 位
    V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_INFO
    管理权限组资料权限
    第 3 位
    V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_MEMBER
    权限组成员管理权限
    第 4 位
    V2TIM_COMMUNITY_PERMISSION_MANAGE_TOPIC_IN_COMMUNITY
    话题管理权限,包含创建、修改、删除话题等
    第 5 位
    V2TIM_COMMUNITY_PERMISSION_MUTE_MEMBER
    对某群成员在社群下所有话题的禁言权限
    第 6 位
    V2TIM_COMMUNITY_PERMISSION_SEND_MESSAGE
    群成员在社群下所有话题的发消息权限
    第 7 位
    V2TIM_COMMUNITY_PERMISSION_AT_ALL
    在社群下所有话题发 at all 消息权限
    第 8 位
    V2TIM_COMMUNITY_PERMISSION_GET_HISTORY_MESSAGE
    在社群下所有话题拉取入群前的历史消息权限
    第 9 位
    V2TIM_COMMUNITY_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE
    在社群下所有话题撤回他人消息权限
    第 10 位
    V2TIM_COMMUNITY_PERMISSION_BAN_MEMBER
    封禁社群成员权限
    话题权限
    第 0 位
    V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC
    管理当前话题的权限,包括修改当前话题的资料、删除当前话题
    第 1 位
    V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC_PERMISSION
    在当前话题中管理话题权限,包括添加、修改、移除话题权限
    第 2 位
    V2TIM_TOPIC_PERMISSION_MUTE_MEMBER
    在当前话题中禁言成员权限
    第 3 位
    V2TIM_TOPIC_PERMISSION_SEND_MESSAGE
    在当前话题中发消息权限
    第 4 位
    V2TIM_TOPIC_PERMISSION_GET_HISTORY_MESSAGE
    在当前话题中拉取入群前的历史消息权限
    第 5 位
    V2TIM_TOPIC_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE
    在当前话题中撤回他人消息权限
    第 6 位
    V2TIM_TOPIC_PERMISSION_AT_ALL
    在当前话题中发消息时有 at all 权限

    场景示例

    用一个场景来介绍一下权限组的使用流程。一个运动类的社群下有 3 个话题分别是【重要通知】、【篮球】、【足球】。所有成员拥有在【重要通知】话题中拉取加入社群前的历史消息权限,在【篮球】、【足球】话题中发消息的权限。成员 a 拥有修改社群资料、管理群成员、在【重要通知】话题中发送消息的权限;成员 b 和 c 拥有在【篮球】、【足球】话题下禁言成员的权限。
    使用流程如下:
    1. 这一点非常重要:在社群中开启权限组功能,设置 enablePermissionGrouptrue,也可以放到最后一步操作。
    2. 社群的 everyone 权限全部关闭即 defaultPermissions 设置为 0,所有成员都没有社群维度的任何权限。
    3. 把【重要通知】话题的 everyone 权限 defaultPermissions 设置为 16(二进制的 10000)即V2TIM_TOPIC_PERMISSION_GET_HISTORY_MESSAGE ,把【篮球】、【足球】话题的 everyone 权限defaultPermissions 设置为 8(二进制的 1000)即 V2TIM_TOPIC_PERMISSION_SEND_MESSAGE ,所有成员都可以【重要通知】话题中拉取加入社群前的历史消息,在【篮球】、【足球】话题中发消息。
    4. 创建名为“社群管理”的权限组,设置社群权限 groupPermission 为 3(二进制值 11),即权限“或”运算的值V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO | V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER ,并添加【重要通知】话题的发消息权限 topicPermission 为 8(二进制的 1000)V2TIM_TOPIC_PERMISSION_SEND_MESSAGE,群成员 a 被添加到该权限组后就拥有了修改社群资料、管理群成员、在【重要通知】话题中发送消息的权限。
    5. 创建名为“话题管理”的权限组,关闭所有社群权限,设置 groupPermission 为 0,并添加【篮球】、【足球】话题禁言成员的权限 topicPermission 为 4(二进制的 100)V2TIM_TOPIC_PERMISSION_MUTE_MEMBER,群成员 b 和群成员 c 被 添加到该权限组 后就拥有了在【篮球】、【足球】话题禁言成员的权限。

    社群权限管理

    开启/关闭权限组功能

    群组可以通过管理员或者权限组来管理,两种方式选其一。开启了权限组功能后,管理员的角色就失效了,相当于普通群成员;关闭了权限组功能后,管理员的能力恢复。
    设置 enablePermissionGroup (Android / iOS & Mac / Windows) 来开启/关闭权限组功能。开启后,管理员的能力失效;关闭后,管理员的能力恢复。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    V2TIMGroupInfo groupInfo = new V2TIMGroupInfo();
    groupInfo.setGroupID("需要开启权限组功能的社群 ID");
    groupInfo.setEnablePermissionGroup(true);
    V2TIMManager.getGroupManager().setGroupInfo(groupInfo, new V2TIMCallback() {
    @Override
    public void onSuccess() {
    // 开启权限组功能成功
    }
    @Override
    public void onError(intcode, String desc) {
    // 开启权限组功能失败
    }
    });
    
    // 群事件监听
    V2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() {
    @Override
    public void onGroupInfoChanged(String groupID, List<V2TIMGroupChangeInfo> changeInfos) {
    // 群资料更新回调
    }
    });
    V2TIMGroupInfo *info = [[V2TIMGroupInfo alloc] init];
    info.groupID = @"需要开启权限组功能的社群 ID";
    info.enablePermissionGroup = YES;
    
    [[V2TIMManager sharedInstance] setGroupInfo:info succ:^{
    // 开启权限组功能成功
    } fail:^(int code, NSString *msg) {
    // 开启权限组功能失败
    }];
    
    // 群事件监听
    [[V2TIMManager sharedInstance] addGroupListener:self];
    - (void)onGroupInfoChanged:(NSString *)groupID changeInfoList:(NSArray<V2TIMGroupChangeInfo *>*)changeInfoList {
    // 群资料更新回调
    }
    V2TIMGroupInfo info;
    info.groupID = "需要开启权限组功能的社群 ID";
    info.enablePermissionGroup = true;
    info.modifyFlag |= (uint32_t)V2TIM_GROUP_INFO_MODIFY_FLAG_ENABLE_PERMISSION_GROUP;
    
    class TestCallBack : public V2TIMValueCallback<V2TIMString> {
    void OnSuccess(const V2TIMString &value) override {
    // 开启权限组功能成功
    }
    void OnError(int error_code, const V2TIMString &error_message) override {
    // 开启权限组功能失败
    }
    };
    auto *callback = new TestCallBack;
    V2TIMManager::GetInstance()->GetGroupManager()->SetGroupInfo(info, callback);
    
    // 群事件监听
    class GroupListener final : public V2TIMGroupListener {
    public:
    GroupListener() = default;
    ~GroupListener() override = default;
    void OnGroupInfoChanged(const V2TIMString &groupID, const V2TIMGroupChangeInfoVector &changeInfos)override {
    // 群资料更新通知
    }
    };
    
    GroupListener groupListener;
    V2TIMManager::GetInstance()->AddGroupListener(&groupListener);

    社群默认权限

    群主和有修改群资料权限的成员可以设置 V2TIMGroupInfo 中的 defaultPermissions (Android / iOS & Mac / Windows) 修改社群的默认权限,默认权限对所有群成员 everyone 生效(群主除外)。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    // 假如需求是设置所有群成员默认在所有话题下可以发消息以及可以拉取加入社群前的历史消息,其他权限关闭
    long communityPermission = V2TIMPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_SEND_MESSAGE | V2TIMPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_GET_HISTORY_MESSAGE;
    V2TIMGroupInfo groupInfo = new V2TIMGroupInfo();
    groupInfo.setGroupID("需要修改的社群 ID");
    groupInfo.setDefaultPermissions(communityPermission);
    V2TIMManager.getGroupManager().setGroupInfo(groupInfo, new V2TIMCallback() {
    @Override public voidonSuccess() {
    // 设置默认权限成功
    }
    @Override public void onError(int code, String desc) {
    // 设置默认权限失败
    }
    });
    
    // 群组资料修改通知
    V2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() {
    @Override
    public void onGroupInfoChanged(String groupID, List<V2TIMGroupChangeInfo> changeInfos) {
    // 群资料更新回调
    }
    });
    // 假如需求是设置所有群成员默认在所有话题下可以发消息以及可以拉取加入社群前的历史消息,其他权限关闭
    V2TIMGroupInfo *info = [[V2TIMGroupInfo alloc] init];
    info.groupID = @"需要修改的社群 ID";
    info.defaultPermissions = V2TIM_COMMUNITY_PERMISSION_SEND_MESSAGE |V2TIM_COMMUNITY_PERMISSION_GET_HISTORY_MESSAGE;
    
    [[V2TIMManager sharedInstance] setGroupInfo:info succ:^{
    // 设置默认权限成功
    } fail:^(int code, NSString *msg) {
    // 设置默认权限失败
    }];
    
    // 群事件监听
    [[V2TIMManager sharedInstance] addGroupListener:self];
    - (void)onGroupInfoChanged:(NSString *)groupID changeInfoList:(NSArray<V2TIMGroupChangeInfo *>*)changeInfoList {
    // 群资料更新回调
    }
    // 假如需求是设置所有群成员默认在所有话题下可以发消息以及可以拉取加入社群前的历史消息,其他权限关闭
    V2TIMGroupInfo info;
    info.groupID = "需要修改的社群 ID";
    info.modifyFlag |= (uint32_t)V2TIM_GROUP_INFO_MODIFY_FLAG_DEFAULT_PERMISSIONS;
    info.defaultPermissions = V2TIM_COMMUNITY_PERMISSION_SEND_MESSAGE | V2TIM_COMMUNITY_PERMISSION_GET_HISTORY_MESSAGE;
    
    class TestCallBack : public V2TIMValueCallback<V2TIMString> {
    void OnSuccess(const V2TIMString &value) override {
    // 设置默认权限成功
    }
    void OnError(int error_code, const V2TIMString &error_message) override {
    // 设置默认权限失败
    }
    };
    auto *callback = new TestCallBack;
    V2TIMManager::GetInstance()->GetGroupManager()->SetGroupInfo(info, callback);
    
    // 群事件监听
    class GroupListener final : public V2TIMGroupListener {
    public:
    GroupListener() = default;
    ~GroupListener() override = default;
    void OnGroupInfoChanged(const V2TIMString &groupID, const V2TIMGroupChangeInfoVector &changeInfos)override {
    // 群资料更新通知
    }
    };
    
    GroupListener groupListener;
    V2TIMManager::GetInstance()->AddGroupListener(&groupListener);

    创建权限组

    群主和有管理权限组资料权限的成员可以调用 createPermissionGroupInCommunity (Android / iOS & Mac / Windows) 创建权限组,默认最多创建 20 个权限组。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    V2TIMPermissionGroupInfo v2TIMPermissionGroupInfo = new V2TIMPermissionGroupInfo();
    v2TIMPermissionGroupInfo.setGroupID("需要创建权限组的社群 ID");
    v2TIMPermissionGroupInfo.setPermissionGroupID("权限组 ID,可不填或者自定义");
    v2TIMPermissionGroupInfo.setPermissionGroupName("权限组名称");
    v2TIMPermissionGroupInfo.setCustomData("权限组自定义字符串");
    // 该权限组的成员具有【修改群资料权限】和【群成员管理权限】
    long communityPermission = V2TIMPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO | V2TIMPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER;
    v2TIMPermissionGroupInfo.setGroupPermission(communityPermission);
    
    V2TIMManager.getCommunityManager().createPermissionGroupInCommunity(v2TIMPermissionGroupInfo, new V2TIMValueCallback<String>() {
    @Override public void onSuccess(String permissionGroupID) {
    // 创建权限组成功
    }
    @Override public void onError(int code, String desc) {
    // 创建权限组失败
    }
    });
    
    // 社群群事件监听
    V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() {
    @Override
    public void onCreatePermissionGroup(String groupID, V2TIMPermissionGroupInfo permissionGroupInfo) {
    // 权限组创建通知
    }
    });
    V2TIMPermissionGroupInfo *permissionGroupInfo = [[V2TIMPermissionGroupInfo alloc] init];
    permissionGroupInfo.groupID = @"需要创建权限组的社群 ID";
    permissionGroupInfo.permissionGroupID = @"权限组 ID,可不填或者自定义";
    permissionGroupInfo.permissionGroupName = @"权限组名称";
    // 该权限组的成员具有【修改群资料权限】和【群成员管理权限】
    permissionGroupInfo.groupPermission = V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO |V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER;
    permissionGroupInfo.customData = @"权限组自定义字符串";
    
    [[V2TIMManager sharedInstance] createPermissionGroupInCommunity:permissionGroupInfo succ:^(NSString *permissionGroupID) {
    // 创建权限组成功
    } fail:^(int code, NSString *desc) {
    // 创建权限组失败
    }];
    
    // 社群事件监听
    [[V2TIMManager sharedInstance] addCommunityListener:self];
    - (void)onCreatePermissionGroup:(NSString *)groupID permissionGroupInfo:(V2TIMPermissionGroupInfo *)permissionGroupInfo {
    // 权限组创建通知
    }
    V2TIMPermissionGroupInfo permissionGroupInfo; permissionGroupInfo.groupID = "需要创建权限组的社群 ID";
    permissionGroupInfo.permissionGroupID = "权限组 ID,可不填或者自定义";
    permissionGroupInfo.permissionGroupName = "权限组名称";
    permissionGroupInfo.customData = "权限组自定义字符串"; // 该权限组的成员具有【修改群资料权限】和【群成员管理权限】
    permissionGroupInfo.groupPermission = V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_INFO | V2TIM_COMMUNITY_PERMISSION_MANAGE_GROUP_MEMBER;
    
    class TestCallBack : public V2TIMValueCallback<V2TIMString> {
    void OnSuccess(const V2TIMString &value) override {
    // 创建权限组成功
    }
    void OnError(int error_code, const V2TIMString &error_message) override {
    // 创建权限组失败
    }
    };
    auto *callback = new TestCallBack;
    V2TIMManager::GetInstance()->GetCommunityManager()->CreatePermissionGroupInCommunity(permissionGroupInfo, callback);
    
    // 社群事件监听
    class CommunityListener final : public V2TIMCommunityListener {
    public:
    CommunityListener() = default;
    ~CommunityListener() override = default;
    void OnCreatePermissionGroup(const V2TIMString &groupID, const V2TIMPermissionGroupInfo &permissionGroupInfo) override {
    // 权限组创建通知
    }
    };
    
    CommunityListener communityListener;
    V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);

    删除权限组

    群主和有管理权限组资料权限的成员可以调用 deletePermissionGroupFromCommunity (Android / iOS & Mac / Windows) 删除权限组。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    List<String> deleteList = new ArrayList<>();
    deleteList.add("权限组 ID1");
    deleteList.add("权限组 ID2");
    
    V2TIMManager.getCommunityManager().deletePermissionGroupFromCommunity("需要删除权限组的社群 ID", deleteList, new V2TIMValueCallback<List<V2TIMPermissionGroupOperationResult>>() {
    @Override
    public void onSuccess(List<V2TIMPermissionGroupOperationResult> results) {
    // 删除成功,results 为每个权限组的操作结果
    }
    @Override
    public void onError(int code, String desc) {
    // 删除失败
    }
    });
    
    // 社群群事件监听
    V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() {
    @Override
    public void onDeletePermissionGroup(String groupID, List<String> permissionGroupIDList) {
    // 权限组删除通知
    }
    });
    NSMutableArray *deleteList = [NSMutableArray array];
    [deleteList addObject:@"权限组 ID1"];
    [deleteList addObject:@"权限组 ID2"];
    
    [[V2TIMManager sharedInstance] deletePermissionGroupFromCommunity:@"需要删除权限组的社群 ID"permissionGroupIDList:deleteList succ:^(NSMutableArray<V2TIMPermissionGroupOperationResult *> *resultList) {
    // 删除成功,resultList 为每个权限组的操作结果
    } fail:^(int code, NSString *desc) {
    // 删除失败
    }];
    
    // 社群事件监听
    [[V2TIMManager sharedInstance] addCommunityListener:self];
    - (void)onDeletePermissionGroup:(NSString *)groupID permissionGroupIDList:(NSArray<NSString *>*)permissionGroupIDList {
    // 权限组删除通知
    }
    V2TIMStringVector permissionGroupIDList;
    permissionGroupIDList.PushBack("权限组 ID1");
    permissionGroupIDList.PushBack("权限组 ID2");
    
    class TestCallBack : public V2TIMValueCallback<V2TIMPermissionGroupOperationResultVector> {
    void OnSuccess(const V2TIMPermissionGroupOperationResultVector &value) override {
    // 删除成功,results 为每个权限组的操作结果
    }
    void OnError(int error_code, const V2TIMString &error_message) override {
    // 删除失败
    }
    };
    auto*callback = new TestCallBack;
    V2TIMManager::GetInstance()->GetCommunityManager()->DeletePermissionGroupFromCommunity("需要删除权限组的社群 ID", permissionGroupIDList, callback);
    
    // 社群事件监听
    class CommunityListener final : public V2TIMCommunityListener {
    public:
    CommunityListener() = default;
    ~CommunityListener() override = default;
    void OnDeletePermissionGroup(const V2TIMString &groupID, const V2TIMStringVector &permissionGroupIDList)override {
    // 权限组删除通知
    }
    };
    
    CommunityListener communityListener;
    V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);

    修改权限组

    群主和有管理权限组资料权限的成员可以调用 modifyPermissionGroupInfoInCommunity (Android / iOS & Mac / Windows) 修改权限组的名称、权限、自定义字段。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    V2TIMPermissionGroupInfo v2TIMPermissionGroupInfo = new V2TIMPermissionGroupInfo();v2TIMPermissionGroupInfo.setGroupID("需要修改权限组的社群 ID"); // 必填
    v2TIMPermissionGroupInfo.setPermissionGroupID("需要修改的权限组 ID"); // 必填
    v2TIMPermissionGroupInfo.setPermissionGroupName("需要修改的权限组名称");
    // 该权限组的成员具有【管理权限组资料权限】和【权限组成员管理权限】
    long communityPermission = V2TIMPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_INFO | V2TIMPermissionGroupInfo.V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_MEMBER;
    v2TIMPermissionGroupInfo.setGroupPermission(communityPermission);
    v2TIMPermissionGroupInfo.setCustomData("需要修改的自定义字符串");
    
    V2TIMManager.getCommunityManager().modifyPermissionGroupInfoInCommunity(v2TIMPermissionGroupInfo, new V2TIMCallback() {
    @Override
    public void onSuccess() {
    // 修改权限组资料成功
    }
    @Override
    public void onError(intcode, String desc) {
    // 修改权限组资料失败
    }
    });
    
    // 社群群事件监听
    V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() {
    @Override
    public void onChangePermissionGroupInfo(String groupID, V2TIMPermissionGroupInfo permissionGroupInfo) {
    // 权限组更新通知
    }
    });
    V2TIMPermissionGroupInfo *permissionGroupInfo = [[V2TIMPermissionGroupInfo alloc] init];
    permissionGroupInfo.groupID = @"需要修改权限组的社群 ID"; // 必填
    permissionGroupInfo.permissionGroupID = @"需要修改的权限组 ID"; // 必填
    permissionGroupInfo.permissionGroupName = @"需要修改的权限组名称";
    permissionGroupInfo.customData = @"需要修改的自定义字符串";
    // 该权限组的成员具有【管理权限组资料权限】和【权限组成员管理权限】
    permissionGroupInfo.groupPermission =V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_INFO | V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_MEMBER;
    
    [[V2TIMManager sharedInstance] modifyPermissionGroupInfoInCommunity:permissionGroupInfo succ:^{
    // 修改权限组资料成功
    } fail:^(int code, NSString *desc) {
    // 修改权限组资料失败
    }];
    
    // 社群事件监听
    [[V2TIMManager sharedInstance] addCommunityListener:self];
    - (void)onChangePermissionGroupInfo:(NSString *)groupID permissionGroupInfo:(V2TIMPermissionGroupInfo *)permissionGroupInfo {
    // 权限组更新通知
    }
    V2TIMPermissionGroupInfo modifyInfo;
    modifyInfo.groupID = "需要修改权限组的社群 ID"; // 必填
    modifyInfo.permissionGroupID = "需要修改的权限组 ID"; // 必填
    modifyInfo.permissionGroupName = "需要修改的权限组名称";
    modifyInfo.customData = "需要修改的自定义字符串";
    // 该权限组的成员具有【管理权限组资料权限】和【权限组成员管理权限】
    modifyInfo.groupPermission = V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_INFO | V2TIM_COMMUNITY_PERMISSION_MANAGE_PERMISSION_GROUP_MEMBER;
    modifyInfo.modifyFlag = V2TIMPermissionGroupInfoModifyFlag::V2TIM_PERMISSION_MODIFY_FLAG_NAME
    | V2TIMPermissionGroupInfoModifyFlag::V2TIM_PERMISSION_MODIFY_FLAG_GROUP_PERMISSION
    | V2TIMPermissionGroupInfoModifyFlag::V2TIM_PERMISSION_MODIFY_FLAG_CUSTOM_DATA;
    
    class TestCallBack : public V2TIMValueCallback<V2TIMString> {
    void OnSuccess(const V2TIMString &value) override {
    // 修改权限组资料成功
    }
    void OnError(int error_code, const V2TIMString &error_message) override {
    // 修改权限组资料失败
    }
    };
    auto *callback = new TestCallBack;
    V2TIMManager::GetInstance()->GetCommunityManager()->ModifyPermissionGroupInfoInCommunity(modifyInfo, newCppAPITestImpl::Callback("ModifyPermissionGroupInfoInCommunity"));
    
    // 社群事件监听
    class CommunityListener final : public V2TIMCommunityListener {
    public:
    CommunityListener() = default;
    ~CommunityListener() override = default;
    void OnChangePermissionGroupInfo(const V2TIMString &groupID, const V2TIMPermissionGroupInfo &permissionGroupInfo) override {
    // 权限组更新通知
    }
    };
    
    CommunityListener communityListener;
    V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);

    获取权限组列表

    获取权限组列表

    群成员可以调用 getPermissionGroupListInCommunity (Android / iOS & Mac / Windows) 获取权限组列表。当参数 permissionGroupIDList 非空时,表示获取指定的权限组列表;当 permissionGroupIDList 为空时,表示获取所有的权限组列表。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    List<String> permissionGroupIDList = new ArrayList<>();
    // permissionGroupIDList 列表有值,表示获取指定的权限组列表;permissionGroupIDList 为空,表示获取所有的权限组列表
    permissionGroupIDList.add("需要获取的权限组 ID");
    
    V2TIMManager.getCommunityManager().getPermissionGroupListInCommunity("需要获取权限组列表的社群 ID", permissionGroupIDList, new V2TIMValueCallback<List<V2TIMPermissionGroupInfoResult>>() {
    @Override
    public void onSuccess(List<V2TIMPermissionGroupInfoResult> resultList) {
    // 获取权限组列表成功
    }
    @Override public voidonError(int code, String desc) {
    // 获取权限组列表失败
    }
    });
    NSMutableArray *permissionGroupIDList = [NSMutableArray array];
    // permissionGroupIDList 列表有值,表示获取指定的权限组列表;permissionGroupIDList 为空,表示获取所有的权限组列表
    [permissionGroupIDList addObject:@"需要获取的权限组 ID"];
    
    [[V2TIMManager sharedInstance] getPermissionGroupListInCommunity:@"需要获取权限组列表的社群 ID"permissionGroupIDList:permissionGroupIDList succ:^(NSMutableArray<V2TIMPermissionGroupInfoResult *>*resultList) {
    // 获取权限组列表成功
    } fail:^(int code, NSString *desc) {
    // 获取权限组列表失败
    }];
    V2TIMStringVector permissionGroupIDList;
    // permissionGroupIDList 列表有值,表示获取指定的权限组列表;permissionGroupIDList 为空,表示获取所有的权限组
    permissionGroupIDList.PushBack("需要获取的权限组 ID");
    
    class TestCallBack : public V2TIMValueCallback<V2TIMPermissionGroupInfoResultVector> {
    void OnSuccess(constV2TIMPermissionGroupInfoResultVector &value) override {
    // 获取权限组列表成功
    }
    void OnError(int error_code,const V2TIMString &error_message) override {
    // 获取权限组列表失败
    }
    };
    auto *callback = new TestCallBack;
    V2TIMManager::GetInstance()->GetCommunityManager()->GetPermissionGroupListInCommunity("需要获取权限组列表的社群 ID", permissionGroupIDList, callback);

    获取已加入的权限组列表

    社群成员可以调用 getJoinedPermissionGroupListInCommunity (Android / iOS & Mac / Windows) 获取已加入的权限组列表。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    V2TIMManager.getCommunityManager().getJoinedPermissionGroupListInCommunity("需要获取权限组列表的社群 ID", new V2TIMValueCallback<List<V2TIMPermissionGroupInfoResult>>() {
    @Override public voidonSuccess(List<V2TIMPermissionGroupInfoResult> resultList) {
    // 获取已加入的权限组成功
    }
    @Override public voidonError(int code, String desc) {
    // 获取已加入的权限组失败
    }
    });
    [[V2TIMManager sharedInstance] getJoinedPermissionGroupListInCommunity:@"需要获取权限组列表的社群 ID"succ:^(NSMutableArray<V2TIMPermissionGroupInfoResult *> *resultList) {
    // 获取已加入的权限组成功
    } fail:^(int code, NSString *desc) {
    // 获取已加入的权限组失败
    }];
    class TestCallBack : public V2TIMValueCallback<V2TIMPermissionGroupInfoResultVector> {
    void OnSuccess(constV2TIMPermissionGroupInfoResultVector &value) override {
    // 获取已加入的权限组成功
    }
    void OnError(interror_code, const V2TIMString &error_message) override {
    // 获取已加入的权限组失败
    }
    };
    auto *callback = newTestCallBack;
    V2TIMManager::GetInstance()->GetCommunityManager()->GetJoinedPermissionGroupListInCommunity("需要获取权限组列表的社群 ID", callback);

    添加权限组成员

    群主和拥有权限组成员管理权限的成员可以调用 addCommunityMembersToPermissionGroup (Android / iOS & Mac / Windows) 添加权限组成员,每次最多添加 20 个成员。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    List<String> memberList = new ArrayList<>();
    // 每次最多添加 20 个成员
    memberList.add("添加群成员1的 userID");
    memberList.add("添加群成员2的 userID");
    
    V2TIMManager.getCommunityManager().addCommunityMembersToPermissionGroup("需要添加权限组群成员的社群 ID", "需要添加权限组群成员的权限组 ID", memberList, new V2TIMValueCallback<List<V2TIMPermissionGroupMemberOperationResult>>() {
    @Override public voidonSuccess(List<V2TIMPermissionGroupMemberOperationResult> resultList) {
    // 添加成员成功
    }
    @Override publicvoid onError(int code, String desc) {
    // 添加成员失败
    }
    });
    
    // 社群群事件监听
    V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() {
    @Override
    public void onAddMembersToPermissionGroup(String groupID, String permissionGroupID, List<String>memberIDList) {
    // 权限组成员添加通知
    }
    });
    NSMutableArray *memberList = [NSMutableArray array];
    [memberList addObject:@"添加群成员1的 userID"];
    [memberList addObject:@"添加群成员2的 userID"];
    
    [[V2TIMManager sharedInstance] addCommunityMembersToPermissionGroup:@"需要添加权限组群成员的社群 ID"permissionGroupID:@"需要添加权限组群成员的权限组 ID" memberList:memberList succ:^(NSMutableArray<V2TIMPermissionGroupMemberOperationResult *> *resultList) {
    // 添加成员成功
    } fail:^(int code, NSString *desc) {
    // 添加成员失败
    }];
    
    // 社群事件监听
    [[V2TIMManager sharedInstance] addCommunityListener:self];
    - (void)onAddMembersToPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID memberIDList:(NSArray<NSString *> *)memberIDList {
    // 权限组成员添加通知
    }
    V2TIMStringVector memberIDList;
    memberIDList.PushBack("添加群成员1的 userID");
    memberIDList.PushBack("添加群成员2的 userID");
    
    class TestCallBack : public V2TIMValueCallback<V2TIMPermissionGroupMemberOperationResultVector> {
    void OnSuccess(constV2TIMPermissionGroupMemberOperationResultVector &value) override {
    // 添加成员成功
    }
    void OnError(interror_code, const V2TIMString &error_message) override {
    // 添加成员失败
    }
    };
    auto *callback = new TestCallBack;
    V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityMembersToPermissionGroup("需要添加权限组群成员的社群 ID", "需要添加权限组群成员的权限组 ID", memberIDList, callback);
    
    // 社群事件监听
    class CommunityListener final : public V2TIMCommunityListener {
    public:
    CommunityListener() = default;
    ~CommunityListener() override = default;
    void OnAddMembersToPermissionGroup(const V2TIMString &groupID, const V2TIMString &permissionGroupID,const V2TIMStringVector &memberIDList) override {
    // 权限组成员添加通知
    }
    };
    
    CommunityListener communityListener;
    V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);

    移除权限组成员

    群主和拥有权限组成员管理权限的成员可以调用 removeCommunityMembersFromPermissionGroup (Android / iOS & Mac / Windows) 从权限组中移除群成员。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    List<String> memberList = new ArrayList<>();
    memberList.add("移除群成员1的 userID");
    memberList.add("移除群成员2的 userID"); V2TIMManager.getCommunityManager().removeCommunityMembersFromPermissionGroup("需要移除权限组群成员的社群 ID", "需要移除权限组群成员的权限组 ID", memberList, new V2TIMValueCallback<List<V2TIMPermissionGroupMemberOperationResult>>() {
    @Override public voidonSuccess(List<V2TIMPermissionGroupMemberOperationResult> resultList) {
    // 移除群成员成功
    }
    @Override public void onError(int code, String desc) {
    // 移除群成员失败
    }
    });
    
    // 社群群事件监听
    V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() {
    @Override
    public void onRemoveMembersFromPermissionGroup(String groupID, String permissionGroupID, List<String>memberIDList) {
    // 权限组成员移除通知
    }
    });
    NSMutableArray *memberList = [NSMutableArray array];
    [memberList addObject:@"移除群成员1的 userID"];
    [memberList addObject:@"移除群成员2的 userID"];
    
    [[V2TIMManager sharedInstance] removeCommunityMembersFromPermissionGroup:@"需要移除权限组群成员的社群 ID" permissionGroupID:@"需要移除权限组群成员的权限组 ID" memberList:memberList succ:^(NSMutableArray<V2TIMPermissionGroupMemberOperationResult *> *resultList) {
    // 移除群成员成功
    } fail:^(int code, NSString *desc) {
    // 移除群成员失败
    }];
    
    // 社群事件监听
    [[V2TIMManager sharedInstance] addCommunityListener:self];
    - (void)onRemoveMembersFromPermissionGroup:(NSString *)groupID permissionGroupID:(NSString *)permissionGroupID memberIDList:(NSArray<NSString *> *)memberIDList {
    // 移除权限组成员通知
    }
    V2TIMStringVector memberIDList;
    memberIDList.PushBack("移除群成员1的 userID");
    memberIDList.PushBack("移除群成员2的 userID"); class TestCallBack : public V2TIMValueCallback<V2TIMPermissionGroupMemberOperationResultVector> {
    void OnSuccess(constV2TIMPermissionGroupMemberOperationResultVector &value) override {
    // 移除群成员成功
    }
    void OnError(interror_code, const V2TIMString &error_message) override {
    // 移除群成员失败
    }
    };
    auto *callback = new TestCallBack;
    V2TIMManager::GetInstance()->GetCommunityManager()->RemoveCommunityMembersFromPermissionGroup("需要移除权限组群成员的社群 ID", "需要移除权限组群成员的权限组 ID", memberIDList, callback);
    
    // 社群事件监听
    class CommunityListener final : public V2TIMCommunityListener {
    public:
    CommunityListener() = default;
    ~CommunityListener() override = default;
    void OnRemoveMembersFromPermissionGroup(const V2TIMString &groupID, const V2TIMString &permissionGroupID, const V2TIMStringVector &memberIDList) override {
    // 权限组成员移除通知
    }
    };
    
    CommunityListener communityListener;
    V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);

    获取权限组成员列表

    调用 getCommunityMemberListInPermissionGroup (Android / iOS & Mac / Windows) 获取权限组中的成员列表,其中参数 nextCursor 为续拉游标,首次拉取时填空字符串,续拉时填上一次调用结果中的返回值。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    V2TIMManager.getCommunityManager().getCommunityMemberListInPermissionGroup("需要获取权限组成员的社群 ID", "需要获取权限组成员的权限组 ID", "", new V2TIMValueCallback<V2TIMPermissionGroupMemberInfoResult>() {
    @Override
    public void onSuccess(V2TIMPermissionGroupMemberInfoResult result) {
    // 获取权限组中的成员列表成功,其中 result.getNextCursor() 返回续拉游标,再次调用该接口续拉时填入该返回值
    }
    @Override
    public void onError(int code, String desc) {
    // 获取权限组中的成员列表失败
    }
    });
    [[V2TIMManager sharedInstance] getCommunityMemberListInPermissionGroup:@"需要获取权限组成员的社群 ID"permissionGroupID:@"需要获取权限组成员的权限组 ID" nextCursor:@"" succ:^(NSString *nextCursor,NSMutableArray<V2TIMGroupMemberFullInfo *> *resultList) {
    // 获取权限组中的成员列表成功,其中 nextCursor 为续拉游标,再次调用该接口续拉时填入该返回值
    } fail:^(int code, NSString *desc) {
    // 获取权限组中的成员列表失败
    }];
    class TestCallBack : public V2TIMValueCallback<V2TIMPermissionGroupMemberInfoResult> {
    void OnSuccess(constV2TIMPermissionGroupMemberInfoResult &value) override {
    // 获取权限组中的成员列表成功,其中 value.nextCursor 返回续拉游标,再次调用该接口续拉时填入该返回值
    }
    void OnError(int error_code, constV2TIMString &error_message) override {
    // 获取权限组中的成员列表失败
    }
    };
    auto *callback = new TestCallBack;
    V2TIMManager::GetInstance()->GetCommunityManager()->GetCommunityMemberListInPermissionGroup("需要获取权限组成员的社群 ID", "需要获取权限组成员的权限组 ID", "", callback);

    话题权限管理

    话题默认权限

    群主和拥有话题管理权限的成员可以调用 setTopicInfo (Android / iOS & Mac / Windows) 修改话题的默认权限,该话题的默认权限对所有群成员 everyone 生效(群主除外)。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    // 假设需求为所有社群成员都有在当前话题发消息的权限和拉取加入社群前的在该话题的历史消息权限
    long topicPermission = V2TIMPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_SEND_MESSAGE | V2TIMPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_GET_HISTORY_MESSAGE;
    V2TIMTopicInfo topicInfo = new V2TIMTopicInfo();
    topicInfo.setTopicID("需要设置话题默认权限的话题 ID");
    topicInfo.setDefaultPermissions(topicPermission);
    
    V2TIMManager.getCommunityManager().setTopicInfo(topicInfo,new V2TIMCallback() {
    @Override
    public void onSuccess() {
    // 修改话题默认权限成功
    }
    @Override public voidonError(int code, String desc) {
    // 修改话题默认权限失败
    }
    });
    
    // 社群群事件监听
    V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() {
    @Override
    public void onChangeTopicInfo(String groupID, V2TIMTopicInfo topicInfo) {
    // 话题信息更新通知
    }
    });
    // 假设需求为所有社群成员都有在当前话题发消息的权限和拉取加入社群前的在该话题的历史消息权限
    V2TIMTopicInfo *info = [[V2TIMTopicInfo alloc] init];
    info.topicID = @"需要设置话题默认权限的话题 ID";
    info.defaultPermissions = V2TIM_TOPIC_PERMISSION_SEND_MESSAGE | V2TIM_TOPIC_PERMISSION_GET_HISTORY_MESSAGE;
    
    [[V2TIMManager sharedInstance] setTopicInfo:info succ:^{
    // 修改话题默认权限成功
    } fail:^(int code, NSString *desc) {
    // 修改话题默认权限失败
    }];
    
    // 社群事件监听
    [[V2TIMManager sharedInstance] addCommunityListener:self];
    - (void)onChangeTopicInfo:(NSString *)groupID topicInfo:(V2TIMTopicInfo *)topicInfo {
    // 话题信息更新通知
    }
    // 假设需求为所有社群成员都有在当前话题发消息的权限和拉取加入社群前的在该话题的历史消息权限
    V2TIMTopicInfo topicInfo;
    topicInfo.topicID = "需要设置话题默认权限的话题 ID";
    topicInfo.defaultPermissions = V2TIM_TOPIC_PERMISSION_SEND_MESSAGE | V2TIM_TOPIC_PERMISSION_GET_HISTORY_MESSAGE;
    topicInfo.modifyFlag = V2TIM_COMMUNITY_MODIFY_FLAG_DEFAULT_PERMISSIONS;
    
    class TestCallBack : public V2TIMValueCallback<V2TIMString> {
    void OnSuccess(const V2TIMString &value)override {
    // 修改话题默认权限成功
    }
    void OnError(int error_code, const V2TIMString &error_message) override {
    // 修改话题默认权限失败
    }
    };
    auto *callback = new TestCallBack; V2TIMManager::GetInstance()->GetGroupManager()->SetTopicInfo(topicInfo, callback);
    
    // 社群事件监听
    class CommunityListener final : public V2TIMCommunityListener {
    public:
    CommunityListener() = default;
    ~CommunityListener() override = default;
    void OnChangeTopicInfo(const V2TIMString &groupID, const V2TIMTopicInfo &topicInfo) override {
    // 话题信息更新通知
    }
    };
    
    CommunityListener communityListener;
    V2TIMManager::GetInstance()->GetCommunityManager()->AddCommunityListener(&communityListener);

    添加权限组的话题权限

    群主和拥有管理权限组资料权限的成员可以调用 addTopicPermissionToPermissionGroup (Android / iOS & Mac / Windows) 向权限组添加话题权限,话题权限对权限组中的成员生效。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    // 假设需求是在权限组中的成员具有【管理话题1的权限】和【在话题1中禁言成员的权限】,以及【管理话题2的权限】和【在话题2中撤回他人消息的权限】
    long topicPermission1 = V2TIMPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TIMPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_MUTE_MEMBER;
    long topicPermission2 = V2TIMPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TIMPermissionGroupInfo.V2TIM_TOPIC_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE;
    HashMap<String, Long> topicPermissionMap = new HashMap<>();
    topicPermissionMap.put("话题1 ID",topicPermission1);
    topicPermissionMap.put("话题2 ID", topicPermission2);
    
    V2TIMManager.getCommunityManager().addTopicPermissionToPermissionGroup("需要添加话题权限的社群 ID", "需要添加话题权限的权限组 ID", topicPermissionMap, new V2TIMValueCallback<List<V2TIMTopicOperationResult>>() {
    @Override
    public void onSuccess(List<V2TIMTopicOperationResult> v2TIMTopicOperationResults) {
    // 添加话题权限成功,参数包含各个话题权限的添加结果
    }
    @Override public void onError(int code, String desc) {
    // 添加话题权限失败
    }
    });
    
    // 社群群事件监听
    V2TIMManager.getCommunityManager().addCommunityListener(new V2TIMCommunityListener() {
    @Override
    public void onAddTopicPermission(String groupID, String permissionGroupID, HashMap<String, Long>topicPermissionMap) {
    // 添加话题权限通知
    }
    });
    // 假设需求是在权限组中的成员具有【管理话题1的权限】和【在话题1中禁言成员的权限】,以及【管理话题2的权限】和【在话题2中撤回他人消息的权限】
    uint64_t topicPermission1 = V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TIM_TOPIC_PERMISSION_MUTE_MEMBER;
    uint64_t topicPermission2 = V2TIM_TOPIC_PERMISSION_MANAGE_TOPIC | V2TIM_TOPIC_PERMISSION_REVOKE_OTHER_MEMBER_MESSAGE;
    NSDictionary<NSString *,NSNumber *> *topicPermissionMap = [[NSMutableDictionary alloc] init];
    [topicPermissionMap setValue:[NSNumber numberWithUnsignedLongLong:topicPermission1] forKey:@"话题1 ID"];
    [topicPermissionMap setValue:[NSNumber numberWithUnsignedLongLong:topicPermission2] forKey:@"话题2 ID"];
    
    [[V2TIMManager sharedInstance] addTopicPermissionToPermissionGroup:@"需要添加话题权限的社群 ID"permissionGroupID:@"需要添加话题权限的权限组 ID" topicPermissionMap:topicPermissionMap succ:^(NSMutableArray<V2TIMTopicOperationResult *> *resultList) {
    // 添加话题权限成功,参数包含各个话题权限的添加结果
    } fail:^(int code, NSString *desc) {
    // 添加话题权限失败
    }];
    
    // 社群事件监听
    [[V2TIMManager sharedInstance] addCommunityListener:self];
    - (void)onAddTopicPermission:(NSString *)groupID permissionGroupID:(NSString *)pe