我一直在考虑我即将开始开发的网络应用程序,并想知道我的常用方法是否可以改进。
在我的最后几个应用程序中,我创建了一个表(见下文)的角色(例如CREATE POST
,EDIT POST
等),每个角色都有一个位域应用于我们,所以我可以简单地分配用户在注册时的某些权利并在以后检查(例如$user->hasRight(CREATE_POST)
)。
我想知道是否有更好的方法。当权利没有专门链接到用户时,它肯定会让人感到困惑(我可以有一个表,其中每个权利都是一个布尔列,但这听起来只是一个很小的改进) - 如果我改变一些会发生什么?
我不打算使用标准库(应用程序本身对我来说是一种学习体验:使用postgresql,git等)虽然我很乐意从他们那里获取灵感来构建我自己的 - 所以如果有的话特别你认为我应该看看请说出来:))
答案 0 :(得分:4)
这与我在自己的网络应用程序中采用的方法基本相同(并且对我来说有一些试验和错误)。唯一的区别是,我可能会使用一个具有不同权限的表作为列,因此如果您想稍后添加更多权限,则可以。使用整数中的位将限制为固定数量的权限,即与整数中的位数一样多的位。通常这将是32,我想这可能已经足够了,但我不想以这种方式限制自己。
对于它的价值,这也是phpBB使用的模型(权限作为表格列),如果它足以说明最受欢迎的PHP网络应用程序,它可能对你来说足够好了; - )
答案 1 :(得分:4)
您可以查看Spring Security(以前称为Acegi)的文档,它是一个广泛使用的Java ACL框架。
文档详尽无遗,并描述了机器人身份验证和授权设计中的各种注意事项。即使不使用Java,也值得一读。
您可以查看index page以获得概述以及Acegi所做(和不做)的印象。您也可以直接跳至authorization concepts或甚至跳至database schema。
答案 2 :(得分:1)
我确定你已经找到了phpgacl,但是这里有一个链接以防你没有。一开始可能有点粗糙,当然,实现项目时,库很难(耗时),但文档和演示是优秀的参考点。
答案 3 :(得分:1)
Zend Framework有ACL,与您尝试的相似。
答案 4 :(得分:1)
一般来说,讨论了Web应用程序中的ACL方法,例如here。