IM 即时通讯
Android
开发指南

身份组相关查询

更新时间: 2023/09/22 16:04:08

服务器身份组相关查询

查询服务器身份组列表

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

  • API 原型

    InvocationFuture<QChatGetServerRolesResult> getServerRoles(QChatGetServerRolesParam param);
    

    其中QChatGetServerRolesParam参数说明如下:

    参数 类型 必填 说明
    serverId Long 服务器 ID
    priority Long 分页锚点优先级(即每页的页尾数据的优先级),填 0 从最高优先级开始查询
    limit Integer 查询数量限制。第一页返回结果额外包含@ everyone身份组,自定义身份组数量充足的情况下会返回 limit+1 个身份组
    categoryId Long 以频道分组 ID 的名义查询。如果传入该参数,则只需要有该频道分组的频道管理权限(MANAGE_CHANNEL)即可,否则需要有服务器的管理权限(MANAGE_SERVER
    channelId Long 以频道 ID 的名义查询。如果传入该参数,则只需要拥有该频道的管理权限(MANAGE_CHANNEL)即可,否则需要有服务器的管理权限(MANAGE_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) {
                    //查询异常
                }
            });
    

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

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

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

  • API 原型

    InvocationFuture<QChatGetMembersFromServerRoleResult> getMembersFromServerRole(QChatGetMembersFromServerRoleParam param);
    

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

  • 示例代码

    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 查询服务器身份组列表

调用getServerRolesByAccid方法,可根据某用户的accid分页查询该用户所属的服务器身份组列表。

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

  • API 原型

    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 查询服务器身份组列表

调用getExistingServerRolesByAccids方法,可通过一批用户的accid查询这些用户所属的服务器身份组列表。

  • 查询结果只会返回自定义身份组,不包含@所有人身份组。
  • 单次调用该方法最多可传入 100 个 accid
  • API 原型

    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) {
                    //查询异常
                }
            });
    

查询服务器身份组是否包含指定成员

调用getExistingAccidsInServerRole方法,可查询某个服务器身份组是否包含指定成员。

  • API 原型

    InvocationFuture<QChatGetExistingAccidsInServerRoleResult> getExistingAccidsInServerRole(QChatGetExistingAccidsInServerRoleParam param);
    

    其中QChatGetExistingMembersFromServerRoleByAccidsParam需要传入需要查询的服务器 ID、服务器身份组 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) {
                    //查询异常
                }
            });
    

频道身份组相关查询

查询频道身份组列表

调用getChannelRoles方法可查询某频道下的身份组列表。

  • API 原型

    InvocationFuture<QChatGetChannelRolesResult> getChannelRoles(QChatGetChannelRolesParam param);
    

    其中QChatGetChannelRolesParam需要传入查询的serverIdchannelId、查询锚点时间戳 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) {
                    //操作异常
                }
            });
    

根据一批服务器身份组查询相应的频道身份组

调用getExistingChannelRolesByServerRoleIds方法,可通过传入一组服务器身份组 ID 查询继承这些服务器身份组的频道身份组列表。

  • API 原型

    /**
    * 通过服务器身份组Id列表查询频道身份组Id列表
    *
    * 传入服务器Id,频道Id,和一组该服务器下的身份组Id组成的列表,
    * 返回该频道下继承自这些服务器身份组的频道服务器身份组
    *
    * @param param
    * @return
    */
    InvocationFuture<QChatGetExistingChannelRolesByServerRoleIdsResult> getExistingChannelRolesByServerRoleIds(QChatGetExistingChannelRolesByServerRoleIdsParam param);
    

    其中QChatGetExistingChannelRolesByServerRoleIdsParam需要传入需要查询的serverIdchannelId和身份组 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) {
                    //查询异常
                }
            });
    

用户定制权限相关查询

查询用户定制权限

调用getMemberRoles方法,分页查询某频道下某个成员的定制权限列表。

该方法需要拥有 MANAGE_ROLE 权限才能调用。

  • API 原型

    InvocationFuture<QChatGetMemberRolesResult> getMemberRoles(QChatGetMemberRolesParam param);
    

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

  • 示例代码

    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) {
                    //操作异常
                }
            });
    

批量查询用户是否拥有定制权限

调用getExistingAccidsOfMemberRoles方法,可通过传入用户的accid列表查询这些accid对应的用户在频道中是否拥有成员定制权限。

  • API 原型

    InvocationFuture<QChatGetExistingAccidsOfMemberRolesResult> getExistingAccidsOfMemberRoles(QChatGetExistingAccidsOfMemberRolesParam param);
    

    其中QChatGetExistingAccidsOfMemberRolesParam需要传入需要查询的serverIdchannelIdaccid列表。

  • 示例代码

    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) {
                    //查询成员定制权限异常
                }
            });
                }
            });
    

查询自己的权限

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

调用checkPermission方法,可通过传入某个身份组权限资源项查询自己是否拥有某个权限。

  • API 原型

    InvocationFuture<QChatCheckPermissionResult> checkPermission(QChatCheckPermissionParam param);
    

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

    • 身份组权限资源项QChatRoleResource中的权限分为服务器专有的权限与非服务器专有权限(即服务器和频道下均可配置的权限)。如果查询服务器专有的权限,则QChatCheckPermissionParam中的channelId不要传,其他情况则channelId必须要传。
    • QChatRoleResource枚举类中提供了方法供判断权限范围:
      • boolean isOnlyServerPermission:是否是仅服务器才拥有的权限
      • boolean isAllPermission:是否是服务器和频道都拥有都权限
  • 示例代码

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 个权限)。

  • API 原型

    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 查询服务器身份组列表
  • 查询服务器身份组是否包含指定成员
  • 频道身份组相关查询
  • 查询频道身份组列表
  • 根据一批服务器身份组查询相应的频道身份组
  • 用户定制权限相关查询
  • 查询用户定制权限
  • 批量查询用户是否拥有定制权限
  • 查询自己的权限
  • 查询自己是否拥有某个权限
  • 查询自己是否拥有某些权限