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

更新时间: 2023/07/21 06:55:28

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

身份组管理

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列表
  • 接口
  • 示例代码
  • 查询自己是否拥有某个权限
  • 接口
  • 示例代码
  • 查询自己是否拥有某些权限
  • 原型
  • 示例代码