【问题标题】:Neo4j user status privacy setting modelNeo4j 用户状态隐私设置模型
【发布时间】:2014-10-23 12:40:50
【问题描述】:

我正在关注这篇文章来设置一个用户可以follow彼此的系统,也可以成为friendshttp://neo4j.com/docs/stable/cypher-cookbook-newsfeed.html

用户(A)可以friend另一个用户(B),因此A自动关注B。用户A也可以followB而不将B添加为朋友。因此,应该对提要结果进行区分。如果 A 和 B 不是已确认的朋友,则 A 应该从 B 获得仅标记为公开的状态更新。如果 A 是 B 的已确认好友,则 A 应该从 B 那里获取所有状态更新。A,即使是 B 的好友,也可以取消关注他/她的订阅。 (典型的 facebook 模型?)。所以基本上我需要检查 A 关注的人并获取他们的更新。但是,在执行此操作时,我还需要检查 A 是否可以访问这些状态更新。

是否有一个简单的密码来实现这个?或者你有更好的模型?假设所有更新都是公开的,以下查询应该可以工作。如果也有friends only 的帖子,你会如何添加隐私设置维度?

MATCH (me { name: 'Joe' })-[rels:FOLLOWS*0..1]-(anotherUser)
WITH anotherUser
MATCH (anotherUser)-[:STATUS]-(latestupdate)-[:NEXT*0..1]-(statusupdates)
RETURN anotherUser.name AS name, statusupdates.date AS date, statusupdates.text AS text
ORDER BY statusupdates.date DESC LIMIT 3

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    是的,您可以实现所有这些要求,在我看来,可以归结为一些额外精心挑选的 WHERE 子句。

    这是您的基本查询,经过修改:

    MATCH (me { name: 'Joe' })-[rels:FOLLOWS*0..1]-(anotherUser)
    WITH anotherUser
    MATCH (anotherUser)-[:STATUS]-(latestupdate)-[:NEXT*0..1]-(statusupdates)
    WHERE statusupdates.visibility='PUBLIC'
    RETURN anotherUser.name AS name, statusupdates.date AS date, statusupdates.text AS text
    ORDER BY statusupdates.date DESC LIMIT 3
    

    在这里,我刚刚添加了一个 WHERE 来检查 visibility=PUBLIC(这是我编造的,因为示例应用程序没有指定这些内容;它必须以某种方式成为模型的一部分)。

    您可以考虑将该查询与 UNION 一起用于另一个查询,该查询旨在仅从朋友那里获取那些状态更新。 (如果是朋友,那么知名度就无所谓了)

    MATCH (me { name: 'Joe' })-[:FRIEND]-(friend)-[:STATUS|NEXT*1..]->(statusupdates)
    RETURN statusupdates
    ORDER BY statusupdates.date DESC LIMIT 3;
    

    除了使用UNION,您还可以将两个查询与第二个模式的OPTIONAL MATCH 子句结合起来。但无论哪种方式,基本上,您的查询都需要获取所有状态更新的列表,这些状态更新要么是您关注的人的帖子是公开的,要么是朋友的帖子,或两者兼而有之。因此,从概念上讲,很容易将其分解为这两个单独的案例,然后将 UNION 两个结果集放在一起。

    【讨论】:

    • 将尝试一下。谢谢。我看到的唯一问题是它将为公共和私人职位设置不同的优先级。例如,假设用户几年前上传了一篇私人帖子,然后他/她只发布了公开帖子。这个密码可能会检索到可能不相关的旧私人帖子?
    猜你喜欢
    • 2012-06-09
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2017-07-08
    相关资源
    最近更新 更多