MySQL中的ACL / RBAC实现

时间:2014-08-10 17:38:54

标签: php mysql sql acl rbac

我正在编写类似于论坛的网站。有任何用户可以制作的帖子,只有海报可以编辑他们的帖子,但版主可以编辑任何帖子,管理员可以改变用户的权限,将他们推广到Mod / Admin,以及改变董事会设置等。

所以我们在这里设置了(根据我的理解)ACL,其所有者 RBAC可以更改帖子,用户可以通过角色授予他们访问资源的权限不论他们的个人要求如何。

我想知道如何在我的SQL表中放置它。

我原本想过这样做:

表格:

  • 用户 - ID /姓名/(等)
  • Users_Groups - UserID / GroupID
  • 群组 - ID /名称/ IsAdmin / CanEditOtherPosts / CanDoOtherStuff / 等等
  • 发布ID /内容/所有者/(等等)

在编辑帖子时,我会检查用户是否是帖子的所有者,或者是否将'CanEditOtherPosts'选项设置为true。

我知道这个实现工作得很好,我决定在实际执行此操作之前检查phpBB和Wordpress的MySQL结构。我现在变得有点担心。

我注意到在phpBB / Wordpress中,而不是在列名中命名他们的权限,他们有以下内容:

  • 用户 - ID /姓名/(等)
  • Users_Groups - UserID / GroupID
  • 群组 - ID /名称
  • 权限 - ID /名称
  • Groups_Permissions - ID / GroupID / PermissionID / Value

这似乎比我原来的解决方案更强大。如果我需要稍后添加不同的权限,我就不必在表中添加列。 (这不是很难)虽然还有其他原因我应该使用这种方法吗?这种方法会有任何性能提升/命中吗? (可能是微不足道的?)

任何建议都将不胜感激。我在创建这个网站时的座右铭是“做得对,第一次”为了获得性能而重写已经起作用的东西或者克服限制是我想要避免的。我宁愿花更多的时间在设计阶段。

0 个答案:

没有答案