配置Firestore安全规则限制查询时间跨度不超过31天
Firestore安全规则:限制查询时间范围不超过31天
我来帮你搞定这个Firestore安全规则的需求~咱们的目标是给timesheets集合的查询加上限制,确保查询的start_from和start_to之间的时间差不超过31天。Firestore的安全规则可以直接读取查询的约束条件,咱们就利用这一点来做校验。
完整的安全规则代码
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /timesheets/{timesheet} { // 单个文档获取可根据业务需求调整规则,这里先示例禁用 allow get: if false; // 限制列表查询的时间范围差不超过31天 allow list: if // 确保查询同时包含start_time的上下限条件 request.query.where('start_time', '>', null) != null && request.query.where('start_time', '<', null) != null && // 计算时间差(31天=31*24*60*60*1000=2678400000毫秒) (request.query.where('start_time', '<').value - request.query.where('start_time', '>').value) <= 2678400000; } } }
关键细节说明
- 校验查询条件完整性:先确保查询同时包含
start_time > start_from和start_time < start_to两个约束,避免无限制的全集合遍历查询。 - 时间差计算逻辑:Firestore中的时间类型在规则里会被转换为毫秒级时间戳,直接用两个条件的时间值相减,和31天对应的毫秒数对比即可。
- 权限区分:
allow list对应你代码里的get()查询(因为该方法返回的是查询结果列表),如果需要允许单个文档的获取操作,可以单独调整allow get的规则,比如结合用户身份校验等业务逻辑。
测试提示
当你尝试执行时间差超过31天的查询时,Firestore会直接返回权限拒绝的错误;只有时间差≤31天的查询才能正常获取数据,刚好满足咱们的限制需求。
内容的提问来源于stack exchange,提问作者hkchakladar
相关产品推荐
相关产品推荐

