“频道分组”身份组
更新时间: 2023/06/29 06:54:53
本文以多用户交互的典型场景为例,介绍在频道分组维度对用户进行权限控制的实现方法和示例代码。
技术原理
网易云信即时通讯 NIM Windows SDK 的Role
类提供管理频道分组身份组的相关方法(如AddChannelCategoryRole
),助您快速实现在频道分组维度对不同用户的权限控制。
调用这些方法,需要管理角色的权限(NIMQChatPermissions
枚举中的kPermissionManageRole
)。
新创建的频道分组身份组的权限,默认继承自指定的服务器身份组(通过服务器身份组的 ID 指定)。如果需要在频道分组维度设置和服务器维度有区分的用户权限,需在创建频道分组身份组后调用UpdateChannelCategoryRole
方法对权限做更改;或者调用AddChannelCategoryMemberRole
方法创建成员在频道分组的定制权限,再调用UpdateChannelCategoryMemberRole
方法设置具体的权限。
实现方法
本节以服务器所有者和服务器成员的交互为例(服务器成员仅被授予管理角色权限的场景),介绍服务器成员创建频道分组身份组的实现流程。
- 服务器所有者可以在创建服务器和频道分组后直接调用
AddChannelCategoryRole
方法创建频道分组身份组。 - 创建后,用户可更新、删除、查询频道分组身份组,相关方法见本文的API参考。
- 服务器成员创建频道分组某人的定制权限的实现,可参考本场景的流程。
前提条件
实现流程
-
服务器所有者调用
AddMembersToServerRole
方法,将服务器成员加入身份组。 -
服务器所有者调用
UpdateServerRole
方法,授予该身份组管理角色的权限(kPermissionManageRole
)。结果:
服务器成员将拥有管理角色的权限。
-
服务器所有者调用
CreateChannelCategory
方法,创建频道分组。 -
如果创建的是私密频道分组,服务器所有者需调用
UpdateChannelCategoryWhiteBlackMembers
方法,将该成员加入频道分组白名单。如果创建的是公开频道分组,请跳过这一步。
-
服务器成员调用
GetServerRoles
方法,查询目标服务器身份组 ID。如果服务器成员在服务器维度没有管理角色的权限,但在频道分组维度有该权限时,调用
GetServerRoles
方法时传入频道分组 ID(channel_category_id
)才能查询服务器的身份组列表,进而获取目标服务器身份组 ID。 -
服务器成员调用
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 调用时序图
示例代码
// 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 |
查询频道分组某人的定制权限 |