8

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

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

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

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

4

4 回答 4

5

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

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

您可以查看索引页面以了解 Acegi 做什么(和不做什么)的概述和印象。您也可以直接跳到授权概念,甚至是数据库模式

于 2009-02-13T17:22:50.587 回答
4

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

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

于 2009-02-13T16:44:46.527 回答
1

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

PHP 通用访问控制列表

于 2009-02-13T16:47:18.410 回答
1

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

于 2009-06-19T19:29:00.903 回答