IM 即时通讯
Android
动态与公告
IM UIKit 更新日志
NIM SDK 开发版更新日志
NIM SDK 稳定版更新日志
新手接入指南
产品介绍
简介
主要功能
产品优势
功能介绍
账号集成与登录
多端登录与互踢策略
群组功能
聊天室功能
聊天室标签功能
圈组功能
质量数据监控台
海外数据中心
IM平滑迁移方案
接口及业务限制
体验 Demo
下载 SDK 与 Demo 源码
快速开始
跑通 IM Demo 源码
实现单聊消息收发(不含 UI)
跑通圈组 Demo 源码
实现圈组消息收发(不含 UI)
含 UI 集成
什么是 IM UIKit
IM UIKit 功能概览
快速集成 IM UIKit
组件导入
初始化
界面跳转
自定义用户信息
全局配置
会话列表相关
集成会话列表界面
会话列表事件监听
自定义会话列表界面 UI
会话列表 API 概览
会话消息相关
集成会话界面
会话界面事件监听
实现音视频通话
实现地理位置消息功能(含 UI)
实现自定义消息发送(含 UI)
自定义会话界面 UI
会话消息 API 概览
通讯录相关
集成通讯录界面
自定义通讯录界面 UI
通讯录界面事件监听
通讯录 API 概览
UIKit 功能实现方案
消息回复实现方案
UIKit 版本升级说明
系统兼容相关
IM UIKit 常见问题排查
IM UIKit API 概览
不含 UI 集成
使用说明
集成 SDK
初始化
登录相关
登录 IM
多端登录与互踢
登出 IM
消息相关
消息概述
消息收发
自定义消息收发
消息配置选项
NOS 存储场景
广播消息收发
消息已读回执
消息撤回
消息重发与转发
消息更新
消息过滤
语音消息处理
插入本地消息
历史消息
最近会话
服务端会话服务
用户资料
用户关系
在线状态订阅
系统通知
系统通知概述
内置系统通知管理
内置系统通知未读数
自定义系统通知收发
Android 离线推送
实现离线推送
配置消息的推送属性
设置群消息强制推送
设置推送全局免打扰
设置多端推送策略
集成小米推送
集成华为推送
集成荣耀推送
集成 OPPO 推送
集成 vivo 推送
集成魅族推送
集成谷歌推送(FCM)
消息提醒
实现消息提醒
配置消息提醒功能
设置群消息强制提醒
设置消息提醒文案
定制通知栏显示信息
群组功能
群组概述
群组管理
群成员管理
群消息管理
超大群功能
聊天室
圈组功能
圈组概述
登录管理
服务器相关
服务器概述
服务器管理
服务器成员管理
游客功能
服务器未读数管理
频道相关
频道概述
频道管理
频道黑白名单
实时互动频道
频道分组
频道分组黑白名单
频道未读数管理
搜索服务器和频道
身份组相关
身份组概述
身份组应用场景
服务器身份组
频道身份组
用户定制权限
频道分组身份组
自定义权限项
成员权限查询与判定
身份组相关查询
圈组订阅机制
圈组消息相关
图解圈组消息流转
圈组消息收发
消息发送配置项
圈组消息撤回
圈组消息更新
圈组消息删除
消息正在输入
会话消息回复(Thread)
圈组快捷评论
获取频道最后一条消息
查询历史消息
查询@我的消息
圈组消息缓存
圈组消息搜索
圈组系统通知相关
圈组系统通知概述
圈组系统通知收发
圈组系统通知更新
圈组离线推送
圈组内容审核
圈组相关抄送
圈组第三方回调
圈组各端接口命名差异
反垃圾(内容审核)
聊天扩展
其他
最佳实践
IM 登录最佳实践
IM 应用隐私合规
聊天室重要消息投递
API 参考
Android SDK API
Android SDK 状态码/错误码
IM 控制台指南
创建应用
注册 IM 账号
升级服务
开通聊天室功能
配置应用客户端标识
添加推送证书
常见问题
FAQ
错题集
Android 端推送问题排查
第三方推送厂商的限制说明
服务协议

身份组管理(已不再维护)

更新时间: 2023/01/30 18:58:36

本文已不再维护,请前往身份组概述及其同级目录查看相关文档。

身份组管理

Web SDK最大可以设置的整型是9007199254740991。如果超过,接收方是Web SDK时会溢出。

创建服务器身份组

接口

  • 服务器创建时会自动创建@所有人身份组(type == QChatRoleType.EVERYONE)。

    @所有人身份组的权限配置,只有服务器创建者可修改。

  • 通过createServerRole接口可以创建自定义身份组(type == QChatRoleType.CUSTOM)。
  • 9.1.0版本后可设置反垃圾配置QChatAntiSpamConfig。
/**
 * 新增服务器身份组
 *
 * @param param
 * @return
 */
InvocationFuture<QChatCreateServerRoleResult> createServerRole(QChatCreateServerRoleParam param);

创建成功后,可以从QChatCreateServerRoleResult获得新建的服务器QChatServerRole。QChatServerRole接口如下:

/**
 * 圈组服务器身份组
 */
public interface QChatServerRole extends Serializable {

   /**
    * @return 返回身份组id
    */
   long getRoleId();

   /**
    * @return 返回身份组所属的服务器Id
    */
   long getServerId();

   /**
    * @return 返回身份组名称
    */
   String getName();

   /**
    * @return 返回身份组图片url
    */
   String getIcon();

   /**
    * @return 返回身份组扩展字段
    */
   String getExtension();

   /**
    *
    * @return 返回资源的权限列表
    */
   Map<QChatRoleResource, QChatRoleOption> getResourceAuths();

   /**
    * @return 返回身份组类型 1表示everyone,2表示定制身份组
    */
   QChatRoleType getType();

   /**
    * @return 该身份组的成员数量,everyone身份组数量为-1
    */
   long getMemberCount();

   /**
    * @return 返回身份组优先级
    * 自定义身份组优先级取值大于0,数字越小优先级越高
    * 同一个用户存在于多个身份组下时,权限由优先级最高的身份组决定
    * everyone身份组优先级总是低于自定义身份组优先级,取值为0且不能更改
    *
    */
   long getPriority();

   /**
    * @return 返回创建时间
    */
   long getCreateTime();

   /**
    * @return 返回更新时间
    */
   long getUpdateTime();
}

其中,权限列表是QChatRoleResource和QChatRoleOption构成的Map。QChatRoleResource列出了所有权限项代表的资源,声明如下:

/**
 * 身份组权限资源项
 */
public enum QChatRoleResource {
    /**
     * 管理服务器:修改服务器,仅server有
     * */
    MANAGE_SERVER("1", 1),
    /**
     * 管理频道,server和channel都有
     * */
    MANAGE_CHANNEL("2", 0),
    /**
     * 管理角色的权限,server和channel都有
     * */
    MANAGE_ROLE("3", 0),
    /**
     * 发送消息,server和channel都有
     * */
    SEND_MSG("4", 0),
    /**
     * 修改自己在该server的服务器成员信息,仅server有
     * */
    ACCOUNT_INFO_SELF("5", 1),
    /**
     * 邀请他人进入server的,仅server有
     * */
    INVITE_SERVER("6", 1),
    /**
     * 踢除他人的权限,仅server有
     * */
    KICK_SERVER("7", 1),
    /**
     * 修改他人在该server的服务器成员信息,仅server有
     * */
    ACCOUNT_INFO_OTHER("8", 1),
    /**
     * 撤回他人消息的权限,server和channel都有
     *  */
    RECALL_MSG("9", 0),
    /**
     * 删除他人消息的权限,server和channel都有
     * */
    DELETE_MSG("10", 0),
    /**
     *  @ 他人的权限,server和channel都有
     * */
    REMIND_OTHER("11", 0),
    /**
     *  @ everyone,server和channel都有
     * */
    REMIND_EVERYONE("12", 0),
    /**
    *  管理黑白名单的权限,server和channel都有
    * */
    MANAGE_BLACK_WHITE_LIST("13", 0),
    /**
     * 封禁他人的权限,仅server有,允许成员永久封禁其他成员访问此服务器
     */
    BAN_SERVER_MEMBER("14", 1),
    /**
     * 实时互动频道:建立自己连接的权限
     */
    RTC_CHANNEL_CONNECT("15", 0),
    /**
     * 实时互动频道:断开他人连接的权限
     */
    RTC_CHANNEL_DISCONNECT_OTHER("16", 0),
    /**
     * 实时互动频道:开启自己麦克风的权限
     */
    RTC_CHANNEL_OPEN_MICROPHONE("17", 0),
    /**
     * 实时互动频道:开启自己摄像头的权限
     */
    RTC_CHANNEL_OPEN_CAMERA("18", 0),
    /**
     * 实时互动频道:开启/关闭他人麦克风的权限
     */
    RTC_CHANNEL_OPEN_CLOSE_OTHER_MICROPHONE("19", 0),
    /**
     * 实时互动频道:开启/关闭他人摄像头的权限
     */
    RTC_CHANNEL_OPEN_CLOSE_OTHER_CAMERA("20", 0),
    /**
     * 实时互动频道:开启/关闭全员麦克风的权限
     */
    RTC_CHANNEL_OPEN_CLOSE_EVERYONE_MICROPHONE("21", 0),
    /**
     * 实时互动频道:开启/关闭全员摄像头的权限
     */
    RTC_CHANNEL_OPEN_CLOSE_EVERYONE_CAMERA("22", 0),
    /**
     * 实时互动频道:打开自己屏幕共享的权限
     */
    RTC_CHANNEL_OPEN_SCREEN_SHARE("23", 0),
    /**
     * 实时互动频道:关闭他人屏幕共享的权限
     */
    RTC_CHANNEL_CLOSE_OTHER_SCREEN_SHARE("24", 0),
    /**
    * 申请邀请管理权限
    */
    SERVER_APPLY_HANDLE("25", 1),
    /**
    * 申请邀请历史查看权限,有这个权限才可以查询server级别的申请/邀请记录
    */
    INVITE_APPLY_HISTORY_QUERY("26", 1),
    ;

    ......
    
}

9.3.0 版本新增实时互动频道相关资源权限、申请邀请管理权限以及申请邀请历史查看权限类型。

QChatRoleOption的选项代表能否访问权限资源项,声明如下:

/**
 *  身份组权限选项
 */
public enum QChatRoleOption {
    /**
     * 有权限
     */
    ALLOW(1),
    /**
     * 无权限
     */
    DENY(-1),
    /**
     * 继承
     */
    INHERIT(0),
    ;
    
    ......
    
}

createServerRole接口需要管理角色的权限,即MANAGE_ROLE资源项的选项需要为ALLOW。

示例代码

QChatCreateServerRoleParam createServerRoleParam = new QChatCreateServerRoleParam(943445L,"测试身份组名称", QChatRoleType.CUSTOM);
createServerRoleParam.setExtension("自定义扩展字段");
//设置身份组头像url
createServerRoleParam.setIcon("http://xxxxxx/xxxxx/x/xx");
QChatAntiSpamConfig antiSpamConfig = new QChatAntiSpamConfig("用户配置的对某些资料内容另外的反垃圾的业务ID");
antiSpamConfig.setAntiSpamBusinessId(antiSpamConfig);
NIMClient.getService(QChatRoleService.class).createServerRole(createServerRoleParam).setCallback(
        new RequestCallback<QChatCreateServerRoleResult>() {
            @Override
            public void onSuccess(QChatCreateServerRoleResult result) {
                //创建成功,返回创建成功的Server身份组信息
                QChatServerRole role = result.getRole();
            }

            @Override
            public void onFailed(int code) {
                //创建失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //创建异常
            }
        });

移除服务器身份组

接口

自定义身份组可以通过deleteServerRole接口删除。

该接口需要管理角色权限('MANAGE_ROLE)。如没有该权限,调用将返回 403` 错误码。

/**
 * 移除服务器身份组
 *
 * @param param
 * @return
 */
InvocationFuture<Void> deleteServerRole(QChatDeleteServerRoleParam param);

其中 QChatDeleteServerRoleParam 需要传入要删除的服务器身份组的ServerId和roleId。

示例代码

QChatServerRole serverRole = getServerRole();
NIMClient.getService(QChatRoleService.class).deleteServerRole(new QChatDeleteServerRoleParam(serverRole.getServerId(),serverRole.getRoleId())).setCallback(
        new RequestCallback<Void>() {
            @Override
            public void onSuccess(Void param) {
                //删除成功
            }

            @Override
            public void onFailed(int code) {
                //删除失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //删除异常
            }
        });

更新服务器身份组信息

接口

updateServerRole接口可以修改服务器身份组的name、icon、ext、resourceAuths和priority字段。

  • 该接口需要管理角色权限('MANAGE_ROLE)。如没有该权限,调用将返回 403` 错误码。
  • 该接口仅支持更新自定义身份组,即 CUSTOM 类型身份组。创建服务器时默认创建的 EVERYONE 身份组不支持更新信息,只支持修改权限。 如调用该接口更新 EVERYONE 身份组信息(身份组的名称、图标、自定义扩展和优先级), 将报错(错误码 403)。QChatRoleType 下定义了 CUSTOMEVERYONE 两种身份组类型。
/**
 * 修改服务器身份组信息
 *
 * @param param
 * @return
 */
InvocationFuture<QChatUpdateServerRoleResult> updateServerRole(QChatUpdateServerRoleParam param);
  • 其中 QChatUpdateServerRoleParam 需要传入服务器身份组的ServerId和roleId。
  • 可以修改Server身份组的名称,图标,自定义扩展,优先级和权限。
  • 9.1.0版本后可设置反垃圾配置QChatAntiSpamConfig。

示例代码

QChatServerRole serverRole = getServerRole();
QChatUpdateServerRoleParam param = new QChatUpdateServerRoleParam(serverRole.getServerId(), serverRole.getRoleId());
param.setName("修改身份组名称");
param.setIcon("http://xxxxxx/xxx/");
param.setExt("修改自定义扩展");
//修改优先级,注意优先级不可与其他身份组相同,不然报错
param.setPriority(2L);
Map<QChatRoleResource, QChatRoleOption> map = new HashMap<>();
//赋予管理黑白名单权限
map.put(QChatRoleResource.MANAGE_BLACK_WHITE_LIST,QChatRoleOption.ALLOW);
param.setResourceAuths(map);
QChatAntiSpamConfig antiSpamConfig = new QChatAntiSpamConfig("用户配置的对某些资料内容另外的反垃圾的业务ID");
antiSpamConfig.setAntiSpamBusinessId(antiSpamConfig);
NIMClient.getService(QChatRoleService.class).updateServerRole(param).setCallback(new RequestCallback<QChatUpdateServerRoleResult>() {
    @Override
    public void onSuccess(QChatUpdateServerRoleResult result) {
        //更新成功,返回更新后的Server身份组
        QChatServerRole role = result.getRole();
    }

    @Override
    public void onFailed(int code) {
        //更新失败,返回错误code
    }

    @Override
    public void onException(Throwable exception) {
        //更新异常
    }
});

批量更新服务器身份组优先级

接口

updateServerRolePriorities接口可以同时修改多个服务器身份组的优先级。

/**
 * 批量修改服务器身份组信息
 *
 * @param param
 * @return
 */
InvocationFuture<QChatUpdateServerRolePrioritiesResult> updateServerRolePriorities(QChatUpdateServerRolePrioritiesParam param);
  • 修改后的优先级必须在修改前的优先级范围之内。比如,修改前serverRole1优先级p1,serverRole2优先级p2,serverRole3优先级p3,想把他们的优先级分别改为P1,P2,P3,必须满足min(P1,P2,P3) >= min(p1,p2,p3),max(P1,P2,P3) <= max(p1,p2,p3)。
  • 该接口需要管理角色权限('MANAGE_ROLE)。如没有该权限,调用将返回 403` 错误码。
  • 其中QChatUpdateServerRolePrioritiesParam需要传入ServerId和服务器身份组Id和服务器身份组优先级构成的Map。

示例代码

Map<Long, Long> roleIdPriorityMap = new HashMap<>();
roleIdPriorityMap.put(10001L,3L);
roleIdPriorityMap.put(10002L,4L);
roleIdPriorityMap.put(10003L,5L);

NIMClient.getService(QChatRoleService.class).updateServerRolePriorities(new QChatUpdateServerRolePrioritiesParam(943445L,roleIdPriorityMap)).setCallback(
        new RequestCallback<QChatUpdateServerRolePrioritiesResult>() {
            @Override
            public void onSuccess(QChatUpdateServerRolePrioritiesResult result) {
                //修改成功,返回修改后的Server身份组Id和Server身份组优先级构成的Map
                Map<Long, Long> roleIdPriorityMap = result.getRoleIdPriorityMap();
            }

            @Override
            public void onFailed(int code) {
                //修改失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //修改异常
            }
        });

查询某服务器下身份组列表

接口

getServerRoles通过分页方式查询服务器身份组列表,查询结果按照priority从大到小排序。查询参数中priority设为0,会从最大优先级开始返回,也就是第一页。第一页查询结果还会额外包含everyone身份组,放在返回列表的第一项。

/**
 * 查询服务器下身份组列表,第一页返回结果额外包含everyone身份组,自定义身份组数量充足的情况下会返回limit+1个身份组
 *
 * @param param
 * @return
 */
InvocationFuture<QChatGetServerRolesResult> getServerRoles(QChatGetServerRolesParam param);

其中QChatGetServerRolesParam参数说明如下:

类型 参数 说明
Long serverId 服务器Id
Long priority 查询锚点优先级,填0从最高优先级开始查询
Integer limit 查询数量限制
Long channelId 以channelId的名义查询,可选,如果传了,则只需要有该channel的管理权限即可,否则需要有server的管理权限

示例代码

NIMClient.getService(QChatRoleService.class).getServerRoles(new QChatGetServerRolesParam(943445L,0,100)).setCallback(
        new RequestCallback<QChatGetServerRolesResult>() {
            @Override
            public void onSuccess(QChatGetServerRolesResult result) {
                //查询成功,返回查询到的Server身份组列表
                List<QChatServerRole> roleList = result.getRoleList();
                //获取当前账户所在的服务器身份组Id集合
                Set<Long> isMemberSet = result.getIsMemberSet();

            }

            @Override
            public void onFailed(int code) {
                //查询失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询异常
            }
        });

新增频道身份组

接口

默认情况下,频道直接使用服务器身份组来控制权限。通过addChannelRole接口可以通过继承某个服务器身份组来新增一个频道身份组。

/**
 * 新增Channel身份组
 *
 * @param param
 * @return
 */
InvocationFuture<QChatAddChannelRoleResult> addChannelRole(QChatAddChannelRoleParam param);

频道身份组QChatChannelRole接口声明如下:

/**
 * Channel身份组
 */
public interface QChatChannelRole extends Serializable {

   /**
    * @return 服务器id
    */
   long getServerId();

   /**
    * @return 身份组id
    */
   long getRoleId();

   /**
    * @return 继承服务器的身份组id
    */
   long getParentRoleId();

   /**
    * @return 频道id
    */
   long getChannelId();

   /**
    * @return 身份组名称
    */
   String getName();

   /**
    * @return 身份组图标url
    */
   String getIcon();

   /**
    * @return 身份组扩展字段
    */
   String getExt();

   /**
    *
    * @return 资源的权限列表
    */
   Map<QChatRoleResource, QChatRoleOption> getResourceAuths();

   /**
    * @return 身份组类型 1表示everyone,2表示定制身份组
    */
   QChatRoleType getType();

   /**
    * @return 创建时间
    */
   long getCreateTime();

   /**
    * @return 更新时间
    */
   long getUpdateTime();
}

新创建的频道身份组和被继承的服务器身份组有以下联系:

  • 公开频道的身份组成员等于被继承的服务器身份组成员去掉频道黑名单成员和频道黑名单身份组成员;私密频道的身份组成员是同时存在于频道白名单和被继承的服务器身份组的公共成员,以及同时存在于频道白名单身份组和被继承的服务器身份组的公共成员。
  • 刚创建时两者权限一样。频道身份组刚创建时所有权限都为INHERIT,和被继承的服务器身份组一样,之后我们可以修改频道身份组,使频道身份组和服务器身份组拥有不一样的权限。
  • 频道身份组的parentRoleId等于被继承的服务器身份组的roleId。

该接口需要管理角色权限('MANAGE_ROLE)。如没有该权限,调用将返回 403` 错误码。

示例代码

QChatServerRole serverRole = getServerRole();
NIMClient.getService(QChatRoleService.class).addChannelRole(new QChatAddChannelRoleParam(serverRole.getServerId(),serverRole.getRoleId(),885305L)).setCallback(
        new RequestCallback<QChatAddChannelRoleResult>() {
            @Override
            public void onSuccess(QChatAddChannelRoleResult result) {
                //操作成功,返回Channe身份组信息
                QChatChannelRole channelRole = result.getRole();


            }

            @Override
            public void onFailed(int code) {
                //操作失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //操作异常
            }
        });

删除频道身份组

该接口需要管理角色权限('MANAGE_ROLE)。如没有该权限,调用将返回 403` 错误码。

/**
 * 删除频道身份组
 *
 * @param param
 * @return
 */
InvocationFuture<Void> removeChannelRole(QChatRemoveChannelRoleParam param);

其中 QChatRemoveChannelRoleParam 需要传入ServerId、ChannelId和身份组Id。

示例代码

QChatChannelRole channelRole = getChannelRole();
NIMClient.getService(QChatRoleService.class).removeChannelRole(new QChatRemoveChannelRoleParam(channelRole.getServerId(),channelRole.getChannelId(),channelRole.getRoleId())).setCallback(
        new RequestCallback<Void>() {
            @Override
            public void onSuccess(Void param) {
                //操作成功
            }

            @Override
            public void onFailed(int code) {
                //操作失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //操作异常
            }
        });

编辑频道下某身份组

接口

该接口需要管理角色权限('MANAGE_ROLE)。如没有该权限,调用将返回 403` 错误码。

/**
 * 修改频道下某身份组的权限
 *
 * @param param
 * @return
 */
InvocationFuture<QChatUpdateChannelRoleResult> updateChannelRole(QChatUpdateChannelRoleParam param);

其中 QChatUpdateChannelRoleParam 需要传入频道身份组的ServerId、ChannelId、roleId和更新的权限Map。

示例代码

QChatChannelRole channelRole = getChannelRole();
Map<QChatRoleResource, QChatRoleOption> resourceAuths = new HashMap<>();
resourceAuths.put(QChatRoleResource.DELETE_MSG,QChatRoleOption.ALLOW);
NIMClient.getService(QChatRoleService.class).updateChannelRole(new QChatUpdateChannelRoleParam(channelRole.getServerId(),channelRole.getChannelId(),channelRole.getRoleId(),resourceAuths)).setCallback(
        new RequestCallback<QChatUpdateChannelRoleResult>() {
            @Override
            public void onSuccess(QChatUpdateChannelRoleResult result) {
                //操作成功,返回修改后的Channel身份组信息
                QChatChannelRole channelRole = result.getRole();
            }

            @Override
            public void onFailed(int code) {
                //操作失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //操作异常
            }
        });

查询某频道下的身份组信息列表

接口

可以查询某个频道下的身份组列表:

/**
 * 查询某频道下的身份组信息列表
 *
 * @param param
 * @return
 */
InvocationFuture<QChatGetChannelRolesResult> getChannelRoles(QChatGetChannelRolesParam param);

其中 QChatGetChannelRolesParam 需要传入查询的ServerId、ChannelId、查询锚点时间戳 timeTag 和查询数量限制 limit。

示例代码

QChatChannel channel = getChannel();
NIMClient.getService(QChatRoleService.class).getChannelRoles(new QChatGetChannelRolesParam(channel.getServerId(),channel.getChannelId(),System.currentTimeMillis(),100)).setCallback(
        new RequestCallback<QChatGetChannelRolesResult>() {
            @Override
            public void onSuccess(QChatGetChannelRolesResult result) {
                //操作成功,返回Channel下的身份组列表
                List<QChatChannelRole> roleList = result.getRoleList();

            }

            @Override
            public void onFailed(int code) {
                //操作失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //操作异常
            }
        });

为某个人定制某频道的权限

除了可以通过频道身份组对所有身份组成员进行权限控制,也可以通过addMemberRole接口对某个成员的权限进行定制。

该接口需要管理角色权限('MANAGE_ROLE)。如没有该权限,调用将返回 403` 错误码。

/**
 * 为某个人定制某频道的权限
 *
 * @param param
 * @return
 */
InvocationFuture<QChatAddMemberRoleResult> addMemberRole(QChatAddMemberRoleParam param);

成员定制权限接口如下:

/**
 * 频道下给某人定制权限
 */
public interface QChatMemberRole extends Serializable {

   /**
    * @return 服务器id
    */
   long getServerId();

   /**
    * @return id
    */
   long getId();

   /**
    * @return 用户账号
    */
   String getAccid();

   /**
    * @return 频道id
    */
   long getChannelId();

   /**
    *
    * @return 资源的权限列表
    */
   Map<QChatRoleResource, QChatRoleOption> getResourceAuths();

   /**
    * @return 创建时间
    */
   long getCreateTime();

   /**
    * @return 更新时间
    */
   long getUpdateTime();
   /**
   * @return 昵称
   */
   String getNick();
   /**
   * @return 头像
   */
   String getAvatar();
   /**
   * @return 自定义字段
   */
   String getCustom();
   /**
   * @return 成员类型
   */
   QChatMemberType getType();
   /**
   * @return 加入时间
   */
   Long getJointime();
   /**
   * @return 邀请者accid
   */
   String getInviter();
}

示例代码

QChatChannel channel = getChannel();
NIMClient.getService(QChatRoleService.class).addMemberRole(new QChatAddMemberRoleParam(channel.getServerId(),channel.getChannelId(),"test")).setCallback(
        new RequestCallback<QChatAddMemberRoleResult>() {
            @Override
            public void onSuccess(QChatAddMemberRoleResult result) {
                //操作成功,返回添加成功的成员定制权限
                QChatMemberRole role = result.getRole();

            }

            @Override
            public void onFailed(int code) {
                //操作失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //操作异常
            }
        });

删除频道下某人的定制权限

接口

该接口需要管理角色权限('MANAGE_ROLE)。如没有该权限,调用将返回 403` 错误码。

/**
 * 删除频道下某人的定制权限
 *
 * @param param
 * @return
 */
InvocationFuture<Void> removeMemberRole(QChatRemoveMemberRoleParam param);

其中QChatRemoveMemberRoleParam需要传入ServerId、ChannelId和accid。

示例代码

QChatChannel channel = getChannel();
NIMClient.getService(QChatRoleService.class).removeMemberRole(new QChatRemoveMemberRoleParam(channel.getServerId(),channel.getChannelId(),"test")).setCallback(
        new RequestCallback<Void>() {
            @Override
            public void onSuccess(Void result) {
                //操作成功
            }

            @Override
            public void onFailed(int code) {
                //操作失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //操作异常
            }
        });

修改某人的定制权限

接口

该接口需要MANAGE_ROLE权限。

/**
 * 修改某人的定制权限
 *
 * @param param
 * @return
 */
InvocationFuture<QChatUpdateMemberRoleResult> updateMemberRole(QChatUpdateMemberRoleParam param);

其中QChatUpdateMemberRoleParam需要传入ServerId、ChannelId、accid和更新的权限Map。

示例代码

QChatMemberRole memberRole = getMemberRole();
Map<QChatRoleResource, QChatRoleOption> resourceAuths = new HashMap<>();
resourceAuths.put(QChatRoleResource.DELETE_MSG,QChatRoleOption.ALLOW);
NIMClient.getService(QChatRoleService.class).updateMemberRole(new QChatUpdateMemberRoleParam(memberRole.getServerId(),memberRole.getChannelId(),memberRole.getAccid(),resourceAuths)).setCallback(
        new RequestCallback<QChatUpdateMemberRoleResult>() {
            @Override
            public void onSuccess(QChatUpdateMemberRoleResult result) {
                //操作成功,返回修改后的成员定制权限
                QChatMemberRole role = result.getRole();
            }

            @Override
            public void onFailed(int code) {
                //操作失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //操作异常
            }
        });

查询频道成员定制权限

接口

可以通过以下接口分页某Channel下的成员定制权限列表。

/**
 * 查询channel下成员定制权限
 *
 * @param param
 * @return
 */
InvocationFuture<QChatGetMemberRolesResult> getMemberRoles(QChatGetMemberRolesParam param);

其中QChatGetMemberRolesParam需要传入ServerId、ChannelId、查询锚点时间戳和查询数量限制。

该接口需要 QChatRoleResource 下的 MANAGE_ROLE 权限才能调用。

示例代码

NIMClient.getService(QChatRoleService.class).getMemberRoles(new QChatGetMemberRolesParam(943445L,885305L,System.currentTimeMillis(),100)).setCallback(
        new RequestCallback<QChatGetMemberRolesResult>() {
            @Override
            public void onSuccess(QChatGetMemberRolesResult result) {
                //操作成功,返回Channel下的成员定制权限列表
                List<QChatMemberRole> roleList = result.getRoleList();

            }

            @Override
            public void onFailed(int code) {
                //操作失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //操作异常
            }
        });

将某些人加入某服务器身份组

接口

通过addMembersToServerRole新增服务器身份组成员后,继承自该服务器身份组的频道身份组成员也会作相应变化。

该接口需要MANAGE_ROLE权限。

/**
 * 将某些人加入某服务器身份组
 *
 * @param param
 * @return
 */
InvocationFuture<QChatAddMembersToServerRoleResult> addMembersToServerRole(QChatAddMembersToServerRoleParam param);

其中QChatAddMembersToServerRoleParam需要传入操作的ServerId、Server身份组Id和accid列表。

示例代码

NIMClient.getService(QChatRoleService.class).addMembersToServerRole(new QChatAddMembersToServerRoleParam(943445L,5673L,accids)).setCallback(
        new RequestCallback<QChatAddMembersToServerRoleResult>() {
            @Override
            public void onSuccess(QChatAddMembersToServerRoleResult result) {
                //操作成功,返回加入成功和加入失败的成员accid列表
                List<String> successAccids = result.getSuccessAccids();
                List<String> failedAccids = result.getFailedAccids();

            }

            @Override
            public void onFailed(int code) {
                //操作失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //操作异常
            }
        });

将某些人移出某服务器身份组

接口

可通过removeMembersFromServerRole删除服务器身份组成员,删除后继承自该服务器身份组的频道身份组成员也会作相应变化。

该接口需要MANAGE_ROLE权限。

/**
 * 将某些人移出某服务器身份组
 *
 * @param param
 * @return
 */
InvocationFuture<QChatRemoveMembersFromServerRoleResult> removeMembersFromServerRole(QChatRemoveMembersFromServerRoleParam param);

其中QChatRemoveMembersFromServerRoleParam需要传入操作的ServerId、Server身份组Id和accid列表。

示例代码

NIMClient.getService(QChatRoleService.class).removeMembersFromServerRole(new QChatRemoveMembersFromServerRoleParam(943445L,5673L,accids)).setCallback(
        new RequestCallback<QChatRemoveMembersFromServerRoleResult>() {
            @Override
            public void onSuccess(QChatRemoveMembersFromServerRoleResult result) {
                //操作成功,返回移除成功和移除失败的成员accid列表
                List<String> successAccids = result.getSuccessAccids();
                List<String> failedAccids = result.getFailedAccids();
                
            }

            @Override
            public void onFailed(int code) {
                //操作失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //操作异常
            }
        });

查询某服务器下某身份组下的成员列表

接口

可调用 getMembersFromServerRole 方法分页查询某服务器身份组下的的成员列表。

/**
 * 查询某服务器下某身份组下的成员列表
 *
 * @param param
 * @return
 */
InvocationFuture<QChatGetMembersFromServerRoleResult> getMembersFromServerRole(QChatGetMembersFromServerRoleParam param);

其中 QChatGetMembersFromServerRoleParam 需要传入ServerId、Server身份组ID、查询锚点时间戳和查询数量限制。其中查询下一页时需要传入查询锚点accid。

该接口仅支持查询自定义身份组下的成员列表,即 CUSTOM 身份组。创建服务器时默认创建的 EVERYONE 身份组不支持调用该接口进行接口查询。 如调用该接口查询 EVERYONE 身份组的成员, 将报错(错误码 403)。QChatRoleType 下定义了 CUSTOMEVERYONE 两种身份组类型。

示例代码

NIMClient.getService(QChatRoleService.class).getMembersFromServerRole(new QChatGetMembersFromServerRoleParam(943445L,5673L,System.currentTimeMillis(),100)).setCallback(
        new RequestCallback<QChatGetMembersFromServerRoleResult>() {
            @Override
            public void onSuccess(QChatGetMembersFromServerRoleResult result) {
                //查询成功,返回指定Server身份组下的成员列表
                List<QChatServerRoleMember> roleMemberList = result.getRoleMemberList();
            }

            @Override
            public void onFailed(int code) {
                //查询失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询异常
            }
        });

通过accid查询服务器身份组列表

接口

SDK可以通过accid、查询锚点时间戳和查询数量限制分页查询该accid所属的Server身份组列表。

查询结果只会返回自定义身份组,不包含@所有人身份组。

/**
 * 通过accid查询该accid所属的服务器身份组列表,结果只有自定义身份组,不包含everyone身份组
 *
 * @param param
 * @return
 */
InvocationFuture<QChatGetServerRolesByAccidResult> getServerRolesByAccid(QChatGetServerRolesByAccidParam param);

其中QChatGetServerRolesByAccidParam需要传入ServerId、accid、查询锚点时间戳和查询数量限制。

示例代码

NIMClient.getService(QChatRoleService.class).getServerRolesByAccid(new QChatGetServerRolesByAccidParam(943445L,"test",System.currentTimeMillis(),100)).setCallback(
        new RequestCallback<QChatGetServerRolesByAccidResult>() {
            @Override
            public void onSuccess(QChatGetServerRolesByAccidResult result) {
                //查询成功,返回该accid所属的Server身份组列表
                List<QChatServerRole> roleList = result.getRoleList();
            }

            @Override
            public void onFailed(int code) {
                //查询失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询异常
            }
        });

通过一批accid查询服务器身份组列表

接口

可以通过一组accid查询这些accid所属的服务器身份组列表。

查询结果只会返回自定义身份组,不包含@所有人身份组。

/**
 * 通过accid查询该accid所属的服务器身份组列表,结果只有自定义身份组,不包含everyone身份组
 *
 * @param param
 * @return
 */
InvocationFuture<QChatGetExistingServerRolesByAccidsResult> getExistingServerRolesByAccids(QChatGetExistingServerRolesByAccidsParam param);

其中QChatGetExistingServerRolesByAccidsParam需要传入查询的ServerId和accid列表。

示例代码

NIMClient.getService(QChatRoleService.class).getExistingServerRolesByAccids(new QChatGetExistingServerRolesByAccidsParam(943445L,accids)).setCallback(
        new RequestCallback<QChatGetExistingServerRolesByAccidsResult>() {
            @Override
            public void onSuccess(QChatGetExistingServerRolesByAccidsResult result) {
                //查询成功,返回存在的自定义Server身份组Map,key为accid,value为自定义Server身份组
                Map<String, List<QChatServerRole>> accidServerRolesMap = result.getAccidServerRolesMap();
            }

            @Override
            public void onFailed(int code) {
                //查询失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询异常
            }
        });

查询一批accid在某服务器身份组下的成员列表

接口

支持通过accid查询某个服务器身份组下的身份组成员信息。

/**
 * 查询一批accids在某个服务器身份组下存在的成员列表
 *
 * @param param
 * @return
 */
InvocationFuture<QChatGetExistingAccidsInServerRoleResult> getExistingAccidsInServerRole(QChatGetExistingAccidsInServerRoleParam param);

其中QChatGetExistingMembersFromServerRoleByAccidsParam需要传入需要查询的ServerId、Server身份组Id和accid列表。

示例代码

NIMClient.getService(QChatRoleService.class).getExistingAccidsInServerRole(new QChatGetExistingAccidsInServerRoleParam(943445L,5673L,accids)).setCallback(
        new RequestCallback<QChatGetExistingAccidsInServerRoleResult>() {
            @Override
            public void onSuccess(QChatGetExistingAccidsInServerRoleResult result) {
                //查询成功,返回指定服务器身份组下存在的成员列表
                List<String> accidList = result.getAccidList();
            }

            @Override
            public void onFailed(int code) {
                //查询失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询异常
            }
        });

查询一批服务器身份组的频道身份组列表

接口

支持通过传入一组服务器身份组Id查询这些服务器身份组被添加到频道后的频道身份组Id列表。只会返回已经配置在该频道的身份组Id列表。

/**
 * 通过服务器身份组Id列表查询频道身份组Id列表
 *
 * 传入服务器Id,频道Id,和一组该服务器下的身份组Id组成的列表,
 * 找出该身份组Id列表中被添加到频道Id所在频道的服务器身份组,并返回这些服务器身份组被添加到频道后的频道身份列表
 *
 * @param param
 * @return
 */
InvocationFuture<QChatGetExistingChannelRolesByServerRoleIdsResult> getExistingChannelRolesByServerRoleIds(QChatGetExistingChannelRolesByServerRoleIdsParam param);

其中QChatGetExistingChannelRolesByServerRoleIdsParam需要传入需要查询的serverId、channelId和身份组id列表。

示例代码

NIMClient.getService(QChatRoleService.class).getExistingChannelRolesByServerRoleIds(new QChatGetExistingChannelRolesByServerRoleIdsParam(943445L,885305L,roids)).setCallback(
        new RequestCallback<QChatGetExistingChannelRolesByServerRoleIdsResult>() {
            @Override
            public void onSuccess(QChatGetExistingChannelRolesByServerRoleIdsResult result) {
                //查询成功,返回已经配置在该的Channel的身份组列表
                List<QChatChannelRole> roleList = result.getRoleList();
            }

            @Override
            public void onFailed(int code) {
                //查询失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询异常
            }
        });

查询一批用户在该频道下的成员定制权限的accid列表

接口

支持通过传入accid列表查询在频道中的成员定制权限的accid列表。查询只会返回已经存在的成员定制权限accid列表。

/**
 * 输入accid列表和频道Id,查询这些用户在该频道下的成员定制权限的accid列表
 *
 * @param param
 * @return
 */
InvocationFuture<QChatGetExistingAccidsOfMemberRolesResult> getExistingAccidsOfMemberRoles(QChatGetExistingAccidsOfMemberRolesParam param);

其中QChatGetExistingAccidsOfMemberRolesParam需要传入需要查询的serverId、channelId和accid列表。

示例代码

NIMClient.getService(QChatRoleService.class).getExistingAccidsOfMemberRoles(new QChatGetExistingAccidsOfMemberRolesParam(943445L,885305L,accids)).setCallback(
        new RequestCallback<QChatGetExistingAccidsOfMemberRolesResult>() {
            @Override
            public void onSuccess(QChatGetExistingAccidsOfMemberRolesResult result) {
                //查询成功,返回已经存在的成员定制权限的accid列表
                List<String> accidList = result.getAccidList();
            }

            @Override
            public void onFailed(int code) {
                //查询成员定制权限失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询成员定制权限异常
            }
        });
            }
        });

查询自己是否拥有某个权限

接口

通过传入某个身份组权限资源项查询自己是否拥有某个权限。

/**
 * 查询自己是否拥有某个权限
 * @param param
 * @return
 */
InvocationFuture<QChatCheckPermissionResult> checkPermission(QChatCheckPermissionParam param);

其中QChatCheckPermissionParam需要传入需要查询的serverId、channelId和身份组权限资源项QChatRoleResource。

  • 身份组权限资源项QChatRoleResource会区分权限是否仅server才有、或仅channel才有亦或server和channel都有。如果查询仅server才有的权限,则QChatCheckPermissionParam中的channelId不要传,其他情况则channelId必须要传
  • QChatRoleResource枚举类中提供了方法供判断权限范围:
    • boolean isOnlyServerPermission():是否是仅Server才拥有的权限
    • boolean isOnlyChannelPermission():是否是仅Channel才拥有的权限
    • boolean isAllPermission():是否是Server和Channel都拥有都权限

示例代码

QChatRoleResource roleResource = QChatRoleResource.MANAGE_BLACK_WHITE_LIST;
QChatCheckPermissionParam param;
if(roleResource.isOnlyServerPermission())
{
    //仅server才有的权限,使用不需要传channelId的构造方法
    param = new QChatCheckPermissionParam(1607312,roleResource);
}else
{
    //其他情况,使用需要传channelId的构造方法
    param = new QChatCheckPermissionParam(1607312,1492446,roleResource);
}

NIMClient.getService(QChatRoleService.class).checkPermission(param).setCallback(new RequestCallback<QChatCheckPermissionResult>() {
    @Override
    public void onSuccess(QChatCheckPermissionResult result) {
        //查询成功,返回是否有权限布尔值
        boolean hasPermission = result.isHasPermission();
    }

    @Override
    public void onFailed(int code) {
        //查询失败,返回错误code
    }

    @Override
    public void onException(Throwable exception) {
        //查询异常
    }
});

查询自己是否拥有某些权限

调用checkPermissions方法查询自己是否拥有某些权限(单次最多可查 10 个权限)。

原型

/**
 * 查询自己是否拥有某些权限
 * @param param
 * @return
 */
InvocationFuture<QChatCheckPermissionsResult> checkPermissions(QChatCheckPermissionsParam param);

示例代码

long serverId = 311254L;
        //如果只查服务器权限,channelId可不传
        long channelId = 211345L;
        //权限列表,一次最多10个权限
        List<QChatRoleResource> permissions = new ArrayList<>();
        permissions.add(QChatRoleResource.SEND_MSG);
        permissions.add(QChatRoleResource.BAN_SERVER_MEMBER);
        
        QChatCheckPermissionsParam param = new QChatCheckPermissionsParam(serverId,channelId,permissions);
        NIMClient.getService(QChatRoleService.class).checkPermissions(param).setCallback(new RequestCallback<QChatCheckPermissionsResult>() {
            @Override
            public void onSuccess(QChatCheckPermissionsResult result) {
                //查询的权限结果,以map方式返回,key为要查询的权限,value为权限结果
                Map<QChatRoleResource, QChatRoleOption> permissionMap = result.getPermissions();
                
            }

            @Override
            public void onFailed(int code) {

            }

            @Override
            public void onException(Throwable exception) {

            }
        });
此文档是否对你有帮助?
有帮助
我要吐槽
  • 创建服务器身份组
  • 接口
  • 示例代码
  • 移除服务器身份组
  • 接口
  • 示例代码
  • 更新服务器身份组信息
  • 接口
  • 示例代码
  • 批量更新服务器身份组优先级
  • 接口
  • 示例代码
  • 查询某服务器下身份组列表
  • 接口
  • 示例代码
  • 新增频道身份组
  • 接口
  • 示例代码
  • 删除频道身份组
  • 示例代码
  • 编辑频道下某身份组
  • 接口
  • 示例代码
  • 查询某频道下的身份组信息列表
  • 接口
  • 示例代码
  • 为某个人定制某频道的权限
  • 示例代码
  • 删除频道下某人的定制权限
  • 接口
  • 示例代码
  • 修改某人的定制权限
  • 接口
  • 示例代码
  • 查询频道成员定制权限
  • 接口
  • 示例代码
  • 将某些人加入某服务器身份组
  • 接口
  • 示例代码
  • 将某些人移出某服务器身份组
  • 接口
  • 示例代码
  • 查询某服务器下某身份组下的成员列表
  • 接口
  • 示例代码
  • 通过accid查询服务器身份组列表
  • 接口
  • 示例代码
  • 通过一批accid查询服务器身份组列表
  • 接口
  • 示例代码
  • 查询一批accid在某服务器身份组下的成员列表
  • 接口
  • 示例代码
  • 查询一批服务器身份组的频道身份组列表
  • 接口
  • 示例代码
  • 查询一批用户在该频道下的成员定制权限的accid列表
  • 接口
  • 示例代码
  • 查询自己是否拥有某个权限
  • 接口
  • 示例代码
  • 查询自己是否拥有某些权限
  • 原型
  • 示例代码