存储用户ID与用户组的顺序

时间:2014-08-03 18:16:10

标签: php json

我目前正在为论坛开发一个自定义插件,它会检查一个json文件,以查看用户是否有权审核某个特定组。我想知道我应该以什么顺序存储这些信息。

让我们说我的演示信息是:用户1和2有权编辑A组。用户1也可以编辑B组。

订单1 - ID优先,然后分组(样机)

{
  "1": [
    "A",
    "B"
  ],
  "2": [
    "A"
  ]
}

订单2 - 第一组,然后ID (样机)

{
  "A": [
    "1",
    "2"
  ],
  "B": [
    "1"
  ]
}

当您使用php时,哪一个更易于管理/使用? (或者在json中存储数据时,这些都是错误的吗?我应该使用其他一些组合吗?我不想使用MySQL,因为它会成为一个非常小的用户组可以管理这些组)

1 个答案:

答案 0 :(得分:1)

每当我看到这样的问题时,如果没有真正正确的答案,因为有很多可能性,我倾向于认为OP只是试图在他们的研究中尽可能详尽和迂腐找到最好的选择,这真的是一种很好的好奇心,非常适合编程。知道了这一点,这里有一些想法。

<强>思想

我认为你应该以不同的方式看待这个问题。当用户可以通过授予他们的权限进行区分时,您实际上就是定义角色。每个角色的区别在于其对内容的访问级别以及可以修改的内容量。

当像这样构图时,想想金字塔。最具特权的角色对所有内容都有最佳概览,因此可以根据自己的判断进行修改。这些人很少。金字塔的下降导致金字塔的每个级别的人越来越多,内容的概述和修改的能力都在不断下降。这种情况一直持续到你到达金字塔的底部,或者#34; Basic&#34;用户角色,默认情况下将授予任何社区的大多数成员。它们是金字塔的基础,但几乎没有特权。

这意味着社区顶层的用户在决策中获得更多权重。例如,假设社区中的最高角色是管理员。&#34;授予此角色的任何用户都可以执行任这是承担很多责任。以加权的方式表示这个角色,这个角色将被赋予权重100.管理员下面是&#34;主持人。&#34;它们对社区至关重要,但授予他们删除整个类别和所有子内容的能力可能过于强大;应该允许他们禁止用户并删除一些内容。如果管理员在降级他们的角色之前解雇他们,他们可以完全摧毁社区。知道了这一点,版主确实承担了重量,但没有管理员那么多。他们将被赋予75的权重。社区需要&#34; Janitors&#34;清理垃圾邮件和转发,但不应允许他们禁止或删除用户。因此,您为它们分配权重50.这种权重分布将继续,直到定义了所有角色,每个角色都有不同的权限。

问题

将这一点绑定在一起,当然,您可以将特定用户ID硬编码为特定的组ID,反之亦然,但在某些时候可能难以管理,特别是考虑到所涉及的重复。

然后考虑,只有具有给定权重的用户才能访问这些组。例如,组A被分配了25的用户访问权重,组B被分配了10的用户访问权重。这意味着权重为25或更高的任何用户将具有对组A的自动访问权限,并且当然因为B组只需要权重为10的用户,任何可以访问A组的用户也可以肯定访问B组,因为25> 10。在金字塔术语中,25等于或大于分配了25或10的用户访问权重的组。通过这种类型的设置,可以有数十个组,每个组具有其自己的用户权重访问权。此外,这是唯一需要分配给组的变量,而不是必须为每个组保留复杂的用户访问列表,反之亦然,用户可以跟踪他们可以访问的不断增长的组ID列表。 / p>

有了这些知识,请考虑您提供的示例。用户1可以访问编辑组A和B.用户2只能访问编辑组B.这意味着用户1拥有更多权限。如果用户1具有更多权限,他也恰好承载比用户2更多的权重。让我们说用户1被赋予30的权重,而用户2被赋予权重为15.系到刚刚描述的组场景中,这个意味着用户1(权重:30)可以明确地访问组A(权重用户访问:25)和B(权重用户访问:10),因为30&gt; 25>另一方面,用户2只能访问组B,因为15>此外,这意味着虽然用户2不能访问组A,但这并不意味着他不能例如访问组C,其最小用户权重要求为5,因为15> 10> 5.此外,这显然意味着用户1也可以访问C组。

<强>后记

你有一天醒来,意识到社区无产阶级不应该接触B组,他们的农民角色权重为10. B组应该是为了更有尊严的社区,权重如11或者更多,因此您将B组的最小角色权重要求增加到11.只需对分配给B组的单个整数进行一次更改,您就可以阻止每个权重为10或更低的用户访问其曾经珍惜的B组。比尔不开心,但你不在乎,因为你是社区之神,体重超过9000,你可以做任何你想做的事情。您也可以在不必修改数十,数百,数千或数百万个特定用户/组访问列表的情况下执行此操作,如上所述,这些列表过于笨拙且无法管理。

这就是智能访问控制的管理方式。