频道用户定制权限
更新时间: 2024/11/21 16:26:31
除了可以通过频道身份组对所有身份组成员在频道维度进行权限控制,也可以为某个频道成员专门定制权限,管控其在频道维度的操作。
定制权限数据结构
频道成员定制权限由QChatMemberRoleInfo
结构体定义,其参数说明如下:
参数 | 类型 | 说明 |
---|---|---|
role_id |
uint64_t | 定制权限所在身份组的ID |
member_info |
QChatMemberInfo |
定制权限的用户信息,包括server_id 和accid 等。 |
channel_id |
uint64_t | 成员所属的频道的 ID |
permissions |
QChatPermission |
权限组合,由权限项(NIMQChatPermissions )和权限开关(NIMQChatPermissionsOption )组成。其中权限开关包括开启(kPermissionSwitchAllow )、关闭(kPermissionSwitchDeny )和继承(kPermissionSwitchExtend )三种状态。 |
create_time |
uint64_t | 定制权限所在身份组的创建时间 |
update_time |
uint64_t | 定制权限所在身份组的更新时间 |
前提条件
开始调用定制权限相关方法前,请确保已创建频道。
实现方法
sequenceDiagram
note over QChat 实例: 初始化与登录
note over QChat 实例: 用户A 授予用户B 服务器维度的权限
用户A ->> QChat 实例: 创建服务器
用户A ->> QChat 实例: 创建服务器身份组
用户A ->> QChat 实例: 修改服务器身份组
note over 用户A: 修改时将需要授予给用户B 的权限开启
用户A ->> QChat 实例: 邀请用户B 加入服务器
用户B ->> QChat 实例: 接受邀请加入服务器
note over 用户B: 用户B 需先加入服务器<br>才能被加为身份组成员
用户A ->> QChat 实例: 将用户B 加入服务器身份组
note over 用户A: 用户B 加入身份组后,获得权限
note over QChat 实例: 用户B 可访问用户A 创建的频道
用户A ->> QChat 实例: 在服务器内创建频道
note over 用户A: 用户B 在以下两种情况下可访问频道(即成为频道成员):<br>1. 创建的是公开频道,且用户B 未被加入频道黑名单<br>2. 创建的私密频道,且用户B 被加入频道白名单
note over QChat 实例: 用户A 为用户B 设置定制权限
用户A ->> QChat 实例: 创建定制权限
note over 用户A: 本时序图场景下,新创建的定制权限,<br>默认继承用户B 已属于的服务器身份组;<br>如果用户B 已成为某频道身份组成员,则继承该频道身份组
用户A ->> QChat 实例: 修改定制权限
用户A ->> QChat 实例: 删除定制权限
创建定制权限
调用AddMemberRole
方法为某个成员创建定制权限。新创建的定制权限配置默认继承自频道身份组相应权限的配置。
调用该方法必须先拥有kPermissionManageRole
权限和kPermissionManageChannel
权限,且必须是该频道的成员。如果没有权限,调用该方法将返回 403
错误码。
- 示例代码
AddMemberRoleParam param; param.server_id = 123456; param.channel_id = 123456; param.account_id = "accid1"; param.cb = [this](const AddMemberRoleResp& resp) { if (resp.res_code != NIMResCode::kNIMResSuccess) { // error handling return; } // process response // ... }; Role::AddMemberRole(param);
修改定制权限
调用UpdateMemberRole
可修改某成员的定制权限。
- 调用该方法必须先拥有
kPermissionManageRole
权限和kPermissionManageChannel
权限,且必须是该频道的成员。如果没有权限,调用该方法将返回403
错误码。 - 用户无法配置自己没有的权限。例如用户没有权限A,则无法修改权限A 的配置。
- 示例代码
UpdateMemberRoleParam param; param.server_id = 123456; param.channel_id = 123456; param.account_id = "accid1"; param.permissions[kPermissionManageChannel] = kPermissionSwitchAllow; param.permissions[kPermissionManageRole] = kPermissionSwitchDeny; param.permissions[kPermissionSendMessage] = kPermissionSwitchExtend; // ... param.cb = [this](const UpdateMemberRoleResp& resp) { if (resp.res_code != NIMResCode::kNIMResSuccess) { // error handling return; } // process response // ... }; Role::UpdateMemberRole(param);
删除定制权限
调用RemoveMemberRole
方法可将某人的定制权限删除。
调用该方法必须先拥有kPermissionManageRole
权限和kPermissionManageChannel
权限,且必须是该频道的成员。如果没有权限,调用该方法将返回 403
错误码。
- 示例代码
RemoveMemberRoleParam param; param.server_id = 123456; param.channel_id = 123456; param.account_id = "accid1"; param.cb = [this](const RemoveMemberRoleResp& resp) { if (resp.res_code != NIMResCode::kNIMResSuccess) { // error handling return; } // process response // ... }; Role::RemoveMemberRole(param);
此文档是否对你有帮助?