IM 即时通讯
Windows/macOS
开发指南

频道用户定制权限

更新时间: 2022/10/09 15:43:26

除了可以通过频道身份组对所有身份组成员在频道维度进行权限控制,也可以为某个频道成员专门定制权限,管控其在频道维度的操作。

定制权限数据结构

频道成员定制权限由QChatMembeRoleInfo结构体定义,其参数说明如下:

参数 类型 说明
role_id uint64_t 定制权限所在身份组的ID
member_info QChatMemberInfo 定制权限的用户信息,包括server_idaccid等。
channel_id uint64_t 成员所属的频道的 ID
permissions QChatPermission 权限组合,由权限项(NIMQChatPermissions)和权限开关(NIMQChatPermissionsOption)组成。其中权限开关包括开启(kPermissionSwitchAllow)、关闭(kPermissionSwitchDeny)和继承(kPermissionSwitchExtend )三种状态。
create_time uint64_t 定制权限所在身份组的创建时间
update_time uint64_t 定制权限所在身份组的更新时间

前提条件

开始调用定制权限相关方法前,请确保已创建频道。

实现方法

uml diagram

创建定制权限

调用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);
    
    

API 参考

API
说明
AddMemberRole 为频道下某成员定制权限
UpdateMemberRole 修改频道下某成员的定制权限
RemoveMemberRole 删除某成员的定制权限
此文档是否对你有帮助?
有帮助
去反馈
  • 定制权限数据结构
  • 前提条件
  • 实现方法
  • 创建定制权限
  • 修改定制权限
  • 删除定制权限
  • API 参考