【问题标题】:how to create a list with access permission checking如何创建具有访问权限检查的列表
【发布时间】:2013-03-10 04:04:57
【问题描述】:

作为标题,当我有一个内容列表,但不是每个人都能看到它们时。 例如: 我有第一组和第二组 我创建了一个帖子,只有组 1 中的用户可以看到它。 我创建了另一个帖子,只有组 2 中的用户可以看到它。

组 1 中的用户 1,组 2 中的用户 2。 然后,用户 1 在查看最新内容列表时,只能看到帖子 1。 然后用户用户2查看最新的内容列表,他只能看到帖子2。

您可以看到,不同的帐户(用户)会在他/她的帖子列表中看到不同的帖子。因为我将所有帖子存储在一个表中,并且将 group_id 存储在其中,所以在为用户创建最新帖子列表时,我必须搜索所有最新帖子并一一检查用户是否可以看到它,如果有没有权限的帖子太多,效果会很差。

另外,组在某些情况下不是静态的,例如:我的关注者,我的朋友,如果是这样,我仍然无法将用户ID存储在帖子表中,并且必须计算他们的关系以确定他/她能不能看这篇文章。同样,该帖子可以具有多个权限组(我的关注者和我的朋友可以看到它)。

我该如何改进它?

顺便说一句,为什么我不在帖子记录中插入user_id数组,因为可能组用户的数量很大,所以我只能将group_id保存在里面。

顺便说一句, 我有一个 SNS 网站。 我使用 mongodb 数据库。 我用php。

【问题讨论】:

    标签: php mongodb database-design database


    【解决方案1】:

    当用户授权时,将他的group_id 存储在会话数据中。然后,您可以在生成菜单时使用 group_id,在数据库查询中将其设置为一个额外条件,以仅获取允许查看该组的帖子。

    如果用户没有授权,你可以使用一些默认的group_id 值来只显示帖子,允许所有人查看。

    对于复杂的情况,如果你有 mysql,我建议使用 UNION,但看起来你只需要执行多个查询。首先,区分所有可能的不同条件,哪些内容组应该可供特定用户使用。

    例如:如果用户只能看到他的群组、他的朋友和他关注的人的内容,你可以简单地做 3 个请求(获取他的群组的内容列表、他关注的人的帖子和他的朋友的帖子)然后将该数据与 PHP 结合并输出。由于所有数据都是相同的(正如您所说 - 所有数据都在 posts 表中),您在这里不需要任何花哨的东西。只需三个请求并在 php 端按照您想要的方式排序。

    【讨论】:

    • 但问题是,有些群不是静态的,是活跃的群,比如:我的朋友可以看到这个帖子或者我的关注者可以看到它。所以我必须计算它们之间的关系。
    • @Elsonwu 当任何用户请求一个网站时,您将他的权限写入他的会话数据。然后,根据该权限,您可以选择要显示的内容。
    • 除了系统默认的groups,不同的人会自己创建不同的auth group,例如:我有组“My Team”,我把你和用户B加到这个组里,但是其他人他们也会创建他们的自定义组,同样,在系统的默认组中,每个人都有“我的朋友”,即使我把这个写到用户的会话中,我仍然不直接创建帖子列表,因为我必须检查当前用户是否是与帖子所有者的朋友,因此将他的权限写入他的会话数据是没有用的。
    • 你写入用户ID的会话数据列表和他可以看到帖子的组ID列表。无论它们之间存在什么样的关系,两个列表都可以解决问题。
    • 您需要提供尽可能多的详细信息,深入了解系统的各个方面。你这样做的方式 - 每次我提出建议时都提供更多信息,很抱歉我无法以这种方式帮助你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多