php – 建立一个更好的访问控制系统 - 代码日志

php – 建立一个更好的访问控制系统

我正在建立一个访问控制系统,作为我正在开发的Web框架的一部分。我想让它超级灵活和真棒。你可以通过提供我的设计的输入和洞察来帮助我吗?这是我的工作到目前为止(我的具体问题在底部):

用户

>用户有一个用户名(32个字符,没有空格)和密码
>用户有一个或多个电子邮件地址必须被验证
>用户可以使用其用户名或其任何电子邮件地址进行登录
>用户可能关联到零个或多个帐户

帐号

>帐户代表一个或多个用户
>每个用户可能具有帐户的特定权限或角色(例如,帐户所有者或“可以添加新用户”)
>所有帐户都与帐户类型相关联

帐户类型

>帐户类型具有零个或多个帐户类型角色
>帐户类型具有零个或多个帐户类型功能

帐户类型角色

>例如“所有者”,“管理员”,“权力用户”,“访客”等
>帐户类型角色是帐户类型权限的集合

帐户类型权限

>帐户类型权限是应用程序逻辑将验证的系统中的特定操作
>他们可以引用父代,因此可以分级分组
>例如:

>“用户管理”

>“添加用户”
>“删除用户”

>这些权限可能专门用于帐户类型功能

帐户类型功能

>帐户类型功能可能会在帐户上激活以给予更多权限
>例如,“标准账户”或“高级帐户”
>这些功能(如果在帐户中激活)将会使帐户所有者更容易访问系统
>他们被激活或停用时被跟踪,并且可以定期或按需收费

问题

应用程序逻辑检查用户操作的最佳方法是什么?我正在考虑将所有用户的权限存储在对象的会话中(这需要注销/登录才能刷新权限,我不是任何想法的实时权限管理的粉丝)?)

{
  "All Permissions": {
    "User Management": {
        "Add User",
        "Delete User"
    },
    "Premium Account": {
        "Download Files",
        "Upload Files"
    },
  }
}

然后,我将声明系统中特定操作所需的权限。也许像:

Permission::require('Add User');

如果声明的权限不在用户权限对象中,则请求将失败。对于每个用户操作来说,这似乎是一种激情。另外,如果另一个权限子集有字符串“添加用户”呢?

提前感谢您的任何帮助!

查看您的帐户类型权限,您似乎有一个访问控制列表(ACL)风格的系统设计。

如果你想让它超级灵活和真棒,那么我建议这不是一个好的设计。 ACL系统的简单权限的工作 – 也许在您的场景中实际上是可以的 – 但是一旦授予权限的规则变得更加轻微的一点动态 – 即依赖于用户身份或角色之外的任何上下文数据 – ACL的下降平坦快

This video详细介绍了ACL的缺陷,并讨论了实现访问控制的替代方法,解决了现实情况。

此外,这已经在之前完成(尽管有令人惊讶的是,我们可以看到的实现);也许看看Rhino Security.原始链接http://ayende.com/Blog/category/548.aspx是坏的,所以保持互联网存档链接参考。

http://stackoverflow.com/questions/3480736/build-a-better-access-control-system

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:php – 建立一个更好的访问控制系统