如何使Firebase数据库中的数据过期

如何使Firebase数据库中的数据过期,firebase,database-design,firebase-realtime-database,firebase-security,nosql,Firebase,Database Design,Firebase Realtime Database,Firebase Security,Nosql,我正在构建一个“事件”应用程序,其中一些用户在应用程序中放置一些事件,而其他用户可以看到它们。假设每个事件都有一个开始日期时间、结束日期时间和名称 我希望用户只看到当前事件,即开始

我正在构建一个“事件”应用程序,其中一些用户在应用程序中放置一些事件,而其他用户可以看到它们。假设每个事件都有一个开始日期时间、结束日期时间和名称

我希望用户只看到当前事件,即开始<现在<结束的事件。这是某种过滤,Firebase不支持这种过滤。我可以通过startAt和endAt查询在应用程序中实现这一点。但是,这不会帮助我向用户隐藏这些机密数据,因为尽管我的应用程序不会访问过去和将来的事件,但任何人都可以从RESTAPI查询数据库以查看这些事件

因此,我决定用三个事件列表来构造数据:
过去的事件
当前的事件
未来的事件

现在的问题是,我需要在适当的时候将事件从
未来事件
移动到
当前事件
,并从
当前事件
移动到
过去事件
。我相信没有办法在firebase中自动触发这些更改。因此,我正在考虑在某处提供一项服务,定期进行清理

这是在Firebase中处理数据过期的最佳方法吗?有什么建议/意见吗


谢谢

如果您有保存在Firebase中的每个事件的结束日期时间,那么您可以仅查询Firebase中处于活动状态的结果

JavaScript中的示例:

var date = new Date();
var currentTime = date.getTime();
var ref = firebase.database().ref("events");
var result = ref.orderByChild("endtime").startAt(currentTime);
用于查询的Firebase文档:


当涉及到清理数据库时,正如您所提到的,在firebase中无法自动进行清理(据我所知),因此如果您想避免手动清理数据库,最好编写一个外部服务来完成此操作。

如果您有保存在firebase中的每个事件的结束日期时间,然后,您只能查询Firebase中处于活动状态的结果

JavaScript中的示例:

var date = new Date();
var currentTime = date.getTime();
var ref = firebase.database().ref("events");
var result = ref.orderByChild("endtime").startAt(currentTime);
用于查询的Firebase文档:


当涉及到清理数据库时,正如您所提到的,在firebase中没有自动清理数据库的方法(据我所知),因此如果您希望避免手动清理数据库,编写一个外部服务来实现这一点是个好主意。

查询解决了应用程序的问题,但我的问题是在数据库级别强制实现这一点。当您不在数据库级别隐藏数据并依靠查询时,任何人都可以手动查询Firebase API以查看您不希望他们看到的事件。当然,我的应用程序也面临同样的问题。我想,唯一的办法是为你的应用程序添加某种后端,它将连接到同一个Firebase数据库,并执行所有逻辑。因此,它可以绑定到数据库,定期检查时间戳,并相应地在列表之间移动事件。@AhmetErenBaşak“任何人”如何查询您的数据?如果设置,则只有满足该条件的用户才能访问数据。@Jay,通过规则,可以定义用户是否可以查询数据。但是,它们不能用于过滤数据。例如,如果我有一个
events
对象,该对象存储该对象中的所有事件,那么我可以设置规则,以便特定用户可以查看该对象下的所有事件,也可以不查看任何事件。无法设置规则,以便用户只能看到当前事件。@AhmetErenBaşak我不建议使用规则过滤内容,因为规则不是用来过滤内容的。但是,可以使用规则拒绝对节点的访问。更重要的问题是,“任何人”如何手动查询Firebase API?一旦理解了这一点,就可以做出更彻底的回答。您是否可以更新最初的问题,即为什么以及如何成为问题?查询解决了应用程序的问题,但我的问题是在数据库级别强制执行此操作。当您不在数据库级别隐藏数据并依靠查询时,任何人都可以手动查询Firebase API以查看您不希望他们看到的事件。当然,我的应用程序也面临同样的问题。我想,唯一的办法是为你的应用程序添加某种后端,它将连接到同一个Firebase数据库,并执行所有逻辑。因此,它可以绑定到数据库,定期检查时间戳,并相应地在列表之间移动事件。@AhmetErenBaşak“任何人”如何查询您的数据?如果设置,则只有满足该条件的用户才能访问数据。@Jay,通过规则,可以定义用户是否可以查询数据。但是,它们不能用于过滤数据。例如,如果我有一个
events
对象,该对象存储该对象中的所有事件,那么我可以设置规则,以便特定用户可以查看该对象下的所有事件,也可以不查看任何事件。无法设置规则,以便用户只能看到当前事件。@AhmetErenBaşak我不建议使用规则过滤内容,因为规则不是用来过滤内容的。但是,可以使用规则拒绝对节点的访问。更重要的问题是,“任何人”如何手动查询Firebase API?一旦理解了这一点,就可以做出更彻底的回答。你可能会更新最初的问题,为什么和如何这是一个问题?你可能想考虑改变你的设计,在“移动”数据“清理”通常是不必要的,如果火箭炮结构正确设置。例如,在运行查询时,仅返回存储在该节点中的时间戳大于7天前的结果。这样,当代码为您处理数据时,您就不必担心数据“过期”。或者返回时间戳为7天后的节点的结果。所有在代码和Firebase规则中完成的操作都会限制用户获取任何其他数据。@Jay,
代码为您处理这些数据
部分与@Pawel Janicki的答案相同,问题是,它对应用程序用户隐藏了数据,但当您直接去查询数据库(例如通过邮递员)时,您可以看到