php - 基于角色的访问有一些变化?

标签 php web-services security

我有一个 Web 应用程序,具有非常简单的基于角色的访问控制。当前设置具有三个角色:

- super 管理员
-管理员
-用户

每个页面请求都会根据该页面的最低访问级别检查用户角色,并根据比较结果授予(或拒绝)对该页面的访问权限。

ADMINS和USERS之间也是一对多的关系;每个管理员负责一名或多名用户。

我现在面临的挑战是添加另一个角色(LIMITED ADMIN)并根据负责用户的管理员是否具有 ADMIN 角色或 LIMITED ADMIN 角色来限制每个用户的访问权限。

针对这种情况是否有既定的最佳实践?修改我当前的访问逻辑来处理这种情况很简单,但随着应用程序的增长,我开始怀疑是否应该转向更强大的访问控制模型。首先想到的是访问控制列表,但它们似乎无法处理一个用户的访问权限可能受到另一个用户的角色限制的情况。

最佳答案

这里有两个问题。

  1. 您并不是在“添加新角色”。您正在添加两个。事实上,管理员创建的用户和受限管理员创建的用户必须具有不同的权限集,这意味着它们实际上是两个不同的角色。就这样编码吧。基于继承将一个物理角色映射到两个逻辑角色的想法不必要地使事情变得复杂。
  2. 您正在将安全模型更改为更细粒度。您的代码以前具有三个角色,现在它具有五个角色(无论第五个角色是否得到官方认可)。

访问控制列表在您的代码和给定角色之间提供一定程度的间接性。您只需验证请求的操作 - 创建?,而不是检查用户的角色。读?更新?删除?是或否,简单的决定。代码永远不会改变。相反,分配角色的 UI 在创建 ACL 时打包权限集。在用户创建屏幕中,管理员看到的权限由该管理员的级别定义 - 受限、常规或 super 。但是,一旦设置了 ACL,它是由管理员还是受限管理员设置的问题就无关紧要了。在运行时它只是创建?读?更新?删除?是或否,简单的决定。

完成此操作后,添加新角色就像在 ACL 上打包正确的权限集合一样简单。添加新权限很容易,只需扩展 ACL 即可。这些更改都不会影响之前的代码解释 ACL 的方式。

请记住,权限是控制对实际资源的访问的有形事物。角色是由权限集合表示的抽象概念。一旦代码中将这两件事分开,像您所描述的那样的更改就会容易得多。两者唯一相遇的地方是在创建用户和分配权限的 UI 中。

关于php - 基于角色的访问有一些变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4857003/

相关文章:

php - 如何将字符串数组转换为 PHP 中的关联数组?

php - 使用 codeigniter 从 2 个表中获取数据

java - 如何将 php 变量返回给 android 应用程序?

java - Web 服务上下文路径而非 Web 应用程序路径

php - Laravel 中的命名空间别名

c# - 关于 NVP 与 SOAP 差异和术语的问题

java - 从 REST 访问请求对象

android - 如何在我自己的私有(private)应用程序中使用 Android 的人脸解锁?

iphone - 是否有可能愚弄越狱的iPhone上的应用程序并进行虚假的inapp购买

java - 通过浏览器注入(inject) header