身份组相关查询
更新时间: 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
下定义了 custom
和 everyone
两种身份组类型。
- 示例代码
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
方法可查询某频道下的身份组列表。调用时需要传入查询的serverId
、channelId
、查询锚点时间戳 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 查询继承这些服务器身份组的频道身份组列表。调用时需要传入需要查询的serverId
、channelId
和身份组 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
方法,可通过传入某个身份组权限资源项查询自己是否拥有某个权限。调用时需要传入待查询的serverId
、channelId
和身份组权限资源项QChatRoleResource
。
-
身份组权限资源项
QChatRoleResource
中的权限分为服务器专有的权限与非服务器专有权限(即服务器和频道下均可配置的权限)。如果查询服务器专有的权限,则QChatCheckPermissionParam
中的channelId
不要传,其他情况则channelId
必须要传。 -
QChatRoleResource
枚举类中提供了方法供判断权限范围:- boolean
isOnlyServerPermission
:是否是仅服务器才拥有的权限 - boolean
isAllPermission
:是否是服务器和频道都拥有都权限
- boolean
- 示例代码
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{ } });