Flutter

身份组相关查询

更新时间: 2024/03/07 11:41:39

本文介绍服务器身份组和频道身份组相关的查询方法。

服务器身份组相关查询

查询服务器身份组列表

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

  • 参数说明

    参数 类型 必填 说明
    serverId int 服务器 ID
    priority int 分页锚点优先级(即每页的页尾数据的优先级),填 0 从最高优先级开始查询
    limit int 查询数量限制。第一页返回结果额外包含@ everyone身份组,自定义身份组数量充足的情况下会返回 limit+1 个身份组
    categoryId int 以频道分组 ID 的名义查询。如果传入该参数,则只需要有该频道分组的频道管理权限(manageChannel)即可,否则需要有服务器的管理权限(manageServer
    channelId int 以频道 ID 的名义查询。如果传入该参数,则只需要拥有该频道的管理权限(manageChannel)即可,否则需要有服务器的管理权限(manageServer
  • 示例代码

dartfinal param = QChatGetServerRolesParam(serverId, 0, 100);
NimCore.instance.qChatRoleService.getServerRoles(param).then((value) {
  if (value.isSuccess) {
    // 查询成功,返回查询到的Server身份组列表
    var roleList = value.data?.roleList;
    // 获取当前账户所在的服务器身份组Id集合
    var isMemberSet = value.data?.isMemberSet;
  } else {
    // 查询失败
  }
});

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

可调用 getMembersFromServerRole方法分页查询某服务器身份组下的的成员列表。该方法的入参结构为QChatGetMembersFromServerRoleParam ,调用时需要传入服务器 ID、服务器身份组ID、查询锚点时间戳和查询数量限制。其中查询下一页时需要传入查询锚点的 accid

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

  • 示例代码
dartfinal param = QChatGetMembersFromServerRoleParam(serverId,roleId,DateTime.now().millisecond,100);
NimCore.instance.qChatRoleService.getMembersFromServerRole(param).then((value) {
  if (value.isSuccess) {
    // 查询成功,返回指定Server身份组下的成员列表
    var roleMemberList = value.data?.roleMemberList;
  } else {
    // 查询失败
  }
});

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

调用getServerRolesByAccid方法,可根据某用户的accid分页查询该用户所属的服务器身份组列表。调用时需要传入需要传入serverId、accid、查询锚点时间戳和查询数量限制

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

  • 示例代码
dartfinal param = QChatGetServerRolesByAccidParam(serverId,accId1,DateTime.now().millisecond,100);
NimCore.instance.qChatRoleService.getServerRolesByAccid(param).then((value) {
  if (value.isSuccess) {
    // 查询成功,返回该accid所属的Server身份组列表
    var roleList = value.data?.roleList;
  } else {
    // 查询失败
  }
});

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

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

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

  • 示例代码
dartfinal param = QChatGetExistingServerRolesByAccidsParam(serverId, [accId1]);
NimCore.instance.qChatRoleService.getExistingServerRolesByAccids(param).then((value) {
  if (value.isSuccess) {
    // 查询成功,返回存在的自定义Server身份组Map,key为accid,value为自定义Server身份组
    var accidServerRolesMap = value.data?.accidServerRolesMap;
  } else {
    // 查询失败
  }
});

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

调用getExistingAccidsInServerRole方法,可查询某个服务器身份组是否包含指定成员。调用时需要传入需要查询的服务器 ID、服务器身份组 ID 和 accid 列表。

  • 示例代码
dartfinal param = QChatGetExistingAccidsInServerRoleParam(serverId, roleId, [accId1]);
NimCore.instance.qChatRoleService.getExistingAccidsInServerRole(param).then((value) {
  if (value.isSuccess) {
    // 查询成功,返回指定服务器身份组下存在的成员列表
    var accidList = value.data?.accidList;
  } else {
    // 查询失败
  }
});

频道身份组相关查询

查询频道身份组列表

调用getChannelRoles方法可查询某频道下的身份组列表。调用时需要传入查询的serverIdchannelId、查询锚点时间戳 timeTag 和查询数量限制 limit

  • 示例代码
dartfinal param = QChatGetChannelRolesParam(serverId, channelId, DateTime.now().millisecond, 100);
NimCore.instance.qChatRoleService.getChannelRoles(param).then((value) {
  if (value.isSuccess) {
    // 操作成功,返回Channel下的身份组列表
    var roleList = value.data?.roleList;
  } else {
    // 操作失败
  }
});

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

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

  • 示例代码
dartfinal param = QChatGetExistingChannelRolesByServerRoleIdsParam(serverId, channelId, [roleId1]);
NimCore.instance.qChatRoleService.getExistingChannelRolesByServerRoleIds(param).then((value) {
  if (value.isSuccess) {
    // 查询成功,返回已经配置在该的Channel的身份组列表
    var roleList = value.data?.roleList;
  } else {
    // 查询失败
  }
});

用户定制权限相关查询

查询用户定制权限

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

该方法需要拥有 QChatRoleResource.manageRole 权限才能调用。

  • 示例代码
dart  final param = QChatGetMemberRolesParam(serverId, channelId, DateTime.now().millisecond, 100);
  NimCore.instance.qChatRoleService.getMemberRoles(param).then((value) {
    if (value.isSuccess) {
      // 操作成功,返回 Channel下的成员定制权限列表
      var roleList = value.data?.roleList;
    } else {
      // 操作失败
    }
  });

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

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

  • 示例代码
dart  final param = QChatGetExistingAccidsOfMemberRolesParam(serverId, channelId, accIds);
  NimCore.instance.qChatRoleService.getExistingAccidsOfMemberRoles(param).then((value) {
    if (value.isSuccess) {
      // 查询成功,返回已经存在的成员定制权限的accid列表
      var accidList = value.data?.accidList;
    } else {
      // 查询成员定制权限失败
    }
  });

查询自己的权限

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

调用checkPermission方法,可通过传入某个身份组权限资源项查询自己是否拥有某个权限。调用时需要传入待查询的serverIdchannelId和身份组权限资源项QChatRoleResource

  • 身份组权限资源项QChatRoleResource中的权限分为服务器专有的权限与非服务器专有权限(即服务器和频道下均可配置的权限)。如果查询服务器专有的权限,则QChatCheckPermissionParam中的channelId不要传,其他情况则channelId必须要传。

  • QChatRoleResource枚举类中提供了方法供判断权限范围:

    • boolean isOnlyServerPermission:是否是仅服务器才拥有的权限
    • boolean isAllPermission:是否是服务器和频道都拥有都权限
  • 示例代码
dart    final roleResource = QChatRoleResource.manageBlackWhiteList;
    final param = roleResource.isOnlyServerPermission()
      ? QChatCheckPermissionParam(serverId, roleResource)
      : QChatCheckPermissionParam(serverId, channelId, roleResource);
    NimCore.instance.qChatRoleService.checkPermission(param).then((value) {
      if (value.isSuccess) {
        // 查询成功,返回是否有权限布尔值
        var hasPermission = value.data?.hasPermission;
      } else {
        // 查询失败
      }
    });

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

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

  • API 原型

    /// 查询自己是否拥有某些权限
    Future<NIMResult<QChatCheckPermissionsResult>> checkPermissions(
        QChatCheckPermissionsParam param) async {
      return _platform.checkPermissions(param);
    }
    
  • 示例代码

    var param = QChatCheckPermissionsParam(serverid,[QChatRoleResource.manageBlackWhiteList],channelId);
      NimCore.instance.qChatRoleService.checkPermissions(param).then((value){
        if(value.isSuccess){
    
        }else{
    
        }
      });
    
    
此文档是否对你有帮助?
有帮助
去反馈
  • 服务器身份组相关查询
  • 查询服务器身份组列表
  • 查询服务器身份组的成员列表
  • 通过 accid 查询服务器身份组列表
  • 通过一批 accid 查询服务器身份组列表
  • 查询服务器身份组是否包含指定成员
  • 频道身份组相关查询
  • 查询频道身份组列表
  • 根据一批服务器身份组查询相应的频道身份组
  • 用户定制权限相关查询
  • 查询用户定制权限
  • 批量查询用户是否拥有定制权限
  • 查询自己的权限
  • 查询自己是否拥有某个权限
  • 查询自己是否拥有某些权限