IM 即时通讯
Windows/macOS
产品介绍
简介
主要功能
产品优势
海外数据中心
IM平滑迁移方案
接口及业务限制
功能介绍
帐号集成与登录
基础消息功能
群组功能
聊天室功能
聊天室标签功能
圈组功能
多端登录与互踢策略
质量数据监控台
更新日志
Demo 更新日志
NIM SDK 更新日志
快速开始
实现单聊消息收发(不含 UI)
实现圈组消息收发(不含 UI)
开发指南
概要介绍
集成方式(当前版本)
集成方式(Windows旧版本)
集成方式(macOS旧版本)
初始化
登录登出
消息收发
最近会话
历史记录
用户资料托管
好友关系托管
事件订阅
系统通知
系统通知概述
内置系统通知管理
内置系统通知未读数
自定义系统通知收发
群组功能
群组概述
群组管理
群成员管理
群消息管理
超大群功能
开通聊天室功能
聊天室
圈组功能
初始化
登录圈组
圈组服务器管理
圈组服务器成员管理
游客功能
频道相关
频道管理
频道分组
频道分组黑白名单
频道未读数管理
搜索服务器和频道
身份组相关
身份组概述
身份组应用场景
服务器身份组
频道身份组
频道分组身份组
频道用户定制权限
自定义权限项
成员权限判定
身份组相关查询
圈组订阅机制
圈组消息相关
圈组消息收发
圈组消息撤回
圈组消息更新
圈组消息删除
会话消息回复(Thread)
圈组快捷评论
获取频道最后一条消息
消息正在输入
圈组消息搜索
圈组消息查询
查询@我的消息
服务器未读数
圈组系统通知
圈组系统通知概述
圈组系统通知收发
圈组系统通知更新
圈组各端接口命名差异
语音录制与播放
NOS云存储服务
文档转换
API 参考
Windows/macOS API 参考
状态码
IM 控制台指南
创建应用
注册 IM 账号
升级服务
配置应用客户端标识
参考文档
升级指引
开发示例
UI库指南
Demo源码导读
打包发布
类与常量定义说明
常见问题
FAQ
服务协议

“频道分组”身份组

更新时间: 2022/05/24 16:43:24

本文以多用户交互的典型场景为例,介绍在频道分组维度对用户进行权限控制的实现方法和示例代码。

技术原理

网易云信即时通讯 NIM Windows SDK 的Role类提供管理频道分组身份组的相关方法(如AddChannelCategoryRole),助您快速实现在频道分组维度对不同用户的权限控制。

调用这些方法,需要管理角色的权限(NIMQChatPermissions枚举中的kPermissionManageRole)。

新创建的频道分组身份组的权限,默认继承自指定的服务器身份组(通过服务器身份组的 ID 指定)。如果需要在频道分组维度设置和服务器维度有区分的用户权限,需在创建频道分组身份组后调用UpdateChannelCategoryRole方法对权限做更改;或者调用AddChannelCategoryMemberRole方法创建成员在频道分组的定制权限,再调用UpdateChannelCategoryMemberRole方法设置具体的权限。

频道分组身份组.png

实现方法

本节以服务器所有者和服务器成员的交互为例(服务器成员仅被授予管理角色权限的场景),介绍服务器成员创建频道分组身份组的实现流程。

  • 服务器所有者可以在创建服务器和频道分组后直接调用AddChannelCategoryRole方法创建频道分组身份组。
  • 创建后,用户可更新、删除、查询频道分组身份组,相关方法见本文的API参考
  • 服务器成员创建频道分组某人的定制权限的实现,可参考本场景的流程。

前提条件

  • 接入圈组,并已创建圈组服务器和身份组。
  • 创建 2 个云信 IM 账号,作为下文中服务器所有者和服务器成员的云信 IM 账号。

实现流程

  1. 服务器所有者调用AddMembersToServerRole方法,将服务器成员加入身份组。

  2. 服务器所有者调用UpdateServerRole方法,授予该身份组管理角色的权限(kPermissionManageRole)。

    结果

    服务器成员将拥有管理角色的权限。

  3. 服务器所有者调用CreateChannelCategory方法,创建频道分组。

  4. 如果创建的是私密频道分组,服务器所有者需调用UpdateChannelCategoryWhiteBlackMembers方法,将该成员加入频道分组白名单。

    如果创建的是公开频道分组,请跳过这一步。

  5. 服务器成员调用GetServerRoles方法,查询目标服务器身份组 ID。

    如果服务器成员在服务器维度没有管理角色的权限,但在频道分组维度有该权限时,调用GetServerRoles方法时传入频道分组 ID(channel_category_id)才能查询服务器的身份组列表,进而获取目标服务器身份组 ID。

  6. 服务器成员调用AddChannelCategoryRole方法,创建频道分组身份组。

    入参 类型 是否必传 说明
    server_id long 频道分组所在的服务器的 ID
    server_role_id long 服务器身份组 ID。生成的频道分组身份组从该服务器身份组继承,以此 ID 作为频道身份组的parentRoleId
    channel_category_id long 频道分组 ID

    服务器成员可通过圈组的内置系统通知(NIMQChatSystemNotificationType枚举中的kNIMQChatSystemNotificationTypeChannelCategoryCreate)获知channel_category_id。如服务器成员人数超过目前默认的阈值 2,000(可联系商务经理调整),成员需调用Server::Subscribe方法订阅服务器才能接收到该系统通知。服务器成员人数在阈值内,则不需要订阅服务器也能接收到。

API 调用时序图

uml diagram

示例代码


// A: add user B to server role
QChatAddMembersToServerRoleParam param;
param.server_id = 123456;
param.role_id = 123456;
param.members_accids = {"B"};
param.cb = [this](const QChatAddMembersToServerRoleResp& resp) {
    if (resp.res_code != NIMResCode::kNIMResSuccess) {
        // error handling
        return;
    }
    // process response
    // ...
};
Role::AddMembersToServerRole(param);

// A: update server role to enable add role to channel category permission
QChatUpdateServerRoleParam param;
param.info.server_id = 123456;
param.info.role_id = 123456;
param.info.permissions[kPermissionManageChannel] = kPermissionSwitchAllow;
param.cb = [this](const QChatUpdateServerRoleResp& resp) {
    if (resp.res_code != NIMResCode::kNIMResSuccess) {
        // error handling
        return;
    }
    // process response
    // ...
};
Role::UpdateServerRole(param);


// B: get server role to add to channel category
QChatGetServerRolesParam param;
param.server_id = 123456;
param.limit = 20;
param.priority = 1;
param.cb = [this](const QChatGetServerRolesResp& resp) {
    if (resp.res_code != NIMResCode::kNIMResSuccess) {
        // error handling
        return;
    }
    // process response
    // ...
};
Role::GetServerRoles(param);

// B: add channel category role
QChatAddChannelCategoryRoleParam param;
param.server_id = 123456;
param.category_id = 123456;
param.parent_role_id = 123456; // server role id
param.cb = [this](const QChatAddChannelCategoryRoleResp& resp) {
    if (resp.res_code != NIMResCode::kNIMResSuccess) {
        // error handling
        return;
    }
    // process response
    // ...
};
Role::AddChannelCategoryRole(param);

// B: update channel category role permission
QChatUpdateChannelCategoryRoleParam param;
param.server_id = 123456;
param.category_id = 123456;
param.role_id = 123456;
param.permissions[kPermissionManageChannel] = kPermissionSwitchAllow;
param.cb = [this](const QChatUpdateChannelCategoryRoleResp& resp) {
    if (resp.res_code != NIMResCode::kNIMResSuccess) {
        // error handling
        return;
    }
    // process response
    // ...
};
Role::UpdateChannelCategoryRole(param);

API参考

API
说明
AddChannelCategoryRole 创建频道分组身份组。创建后,默认继承服务器身份组的权限。如需更改权限,需调用UpdateChannelCategoryRole
RemoveChannelCategoryRole 删除频道分组身份组
UpdateChannelCategoryRole 更新频道分组身份组。设置频道分组身份组的权限,需调用该方法
GetChannelCategoryRolesPage 查询频道分组身份组信息
AddChannelCategoryMemberRole 创建频道分组某人的定制权限,创建后还需调用UpdateChannelCategoryMemberRole才能授予某人权限
RemoveChannelCategoryMemberRole 删除频道分组某人的定制权限
UpdateChannelCategoryMemberRole 修改频道分组某人的定制权限。创建某人定制权限后,需再调用本方法才能授予某人权限
GetChannelCategoryMemberRolesPage 查询频道分组某人的定制权限
此文档是否对你有帮助?
有帮助
我要吐槽
  • 技术原理
  • 实现方法
  • 前提条件
  • 实现流程
  • API 调用时序图
  • 示例代码
  • API参考