【问题标题】:How should I be implementing my ACL in a web application? [closed]我应该如何在 Web 应用程序中实现我的 ACL? [关闭]
【发布时间】:2009-02-13 16:34:07
【问题描述】:

我一直在考虑我即将开始开发的网络应用程序,并想知道是否可以改进我常用的方法。

在我最近的几个应用程序中,我创建了一个角色表(见下文)(例如CREATE POSTEDIT POST 等),每个角色都应用了一个位域,因此我可以简单地为用户分配某些权限注册并稍后检查它们(例如$user->hasRight(CREATE_POST))。

我想知道是否有更好的方法。当权限没有具体链接到用户时肯定会令人困惑(我可以有一个表,其中每个权限都是一个布尔列,但这听起来只是一个小的改进) - 如果我改变一些会发生什么?

我不打算使用标准库(该应用程序本身对我来说是一种学习体验:使用 postgresql、git 等)虽然我很高兴从它们那里获得灵感来构建自己的库 - 所以如果有什么特别你认为我应该看看请说出来:)

【问题讨论】:

  • 另外:它将用于 PHP 应用程序,但如果有一个很好的实践,比如 Ruby on Rails,我相信我能弄明白 :)

标签: php acl access-control rights-management


【解决方案1】:

您可以查看 Spring Security(以前称为 Acegi)的文档,它是一个广泛使用的 Java ACL 框架。

该文档详尽无遗,还描述了机器人身份验证和授权设计中的各种注意事项。即使不使用 Java,也值得一读。

您可以查看index page 以了解 Acegi 做什么(和不做什么)的概述和印象。您也可以直接跳到authorization concepts 甚至是database schema

【讨论】:

【解决方案2】:

这与我在自己的 Web 应用程序中采用的方法基本相同(对我来说,我已经进行了一些试验和错误)。唯一的区别是,我可能会使用具有不同权限的表作为列,因此如果您以后想添加更多权限,您可以。在整数中使用位将您限制为固定数量的权限,即与整数中的位数一样多。通常情况下,我认为 32 可能就足够了,但我不希望这样限制自己。

对于它的价值,这也是 phpBB 使用的模型(权限作为表格列),如果它对于可以说是最流行的 PHP 网络应用程序来说足够好,那么它可能对你来说已经足够好了 ;-)

【讨论】:

  • 我喜欢将表用于 ACL 的想法。你认为你可以建议我如何设计这个正确的方法来实现 ACL。所以我有一个表Project,它与Drawing 有一对多的关系,还有一个表USER。假设我们有项目AB,其中有很多图纸。我该如何设计,我可以允许 1 位用户仅查看 A,一位用户仅查看 B,并且 1 位用户可以同时查看。
【解决方案3】:

我确定你已经找到了 phpgacl,但如果你还没有找到,这里有一个链接。一开始可能有点粗略,当然这个库在项目中实施起来很棘手(耗时),但文档和演示是优秀的参考点。

PHP Generic Access Control Lists

【讨论】:

  • 我没有,但它看起来确实很有趣。
【解决方案4】:

一般来说,已经讨论了 Web 应用程序中的 ACL 方法,例如 here

【讨论】:

  • 请避免仅链接的答案。如果链接断开,则答案将无法使用。
猜你喜欢
  • 2014-12-20
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 2010-09-07
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多