php - 细粒度的访问控制

标签 php mysql authorization access-control

我熟悉为我们正在开发的基于 Web 的管理应用程序验证用户身份的一大堆方法,甚至熟悉各种用于监控授权的技术...

但是,我想问你的是,你会如何推荐我实现一个提供以下功能的细粒度访问控制机制:

  1. 用户属于“角色”或“组”,例如“销售员”、“计划”等。
  2. 管理菜单系统仅显示具有与用户角色相关的功能的“页面”
  3. 这些页面中的特定功能有限制 - 例如,在“新预订”页面上,“销售人员”用户可以发布“仅在未来”的预订,而在“编辑预订”页面上可以编辑“一个”预订从现在开始的一周'。但是,可能允许“计划”用户追溯“最多一周前”的预订并编辑他们自己“任何时间段”的预订,但其他人的预订只能“到明天”...

我知道我可以实现一个基本的基于角色的系统来满足 1...我觉得我应该将整个应用程序分成代码块,每个代码块都有自己的 objectID-permissionID 关系,这样我就可以扫描查看哪些对象可用的权限数据库 - 这对我的第 2 项有帮助。

关于如何构建表单控件的任何想法,例如,对于“销售”用户只显示 future 的日期(但对于计划用户显示最多“一周前”的日期),然后以某种方式将其与POST 解析器中检查日期是否确实在预期范围内的行?

我一直在想我应该将每个代码块保存到数据库中,然后有一个对象表根据权限表动态构建代码,这样服务器上唯一的"file"就是数据库连接文件!

欢迎提出任何想法...(即使您的背景不是 php/MySQL)


Zed Shaw 在 CUSEC 的演讲中谈到了为什么“ACL 已死”- http://vimeo.com/2723800

最佳答案

警告,前面有很多 Zend Framework!

您可以使用 Zend_Acl 轻松处理 1. 和 2.和 Zend_Navigation .

对于第 3 种情况,您将不得不查询模型中的 ACL 对象并手动执行大量操作。您也可以将 Zend Framework 用于表单,并根据用户角色权限包括特定的表单元素验证器。

编辑:

如果您不想走 ZF 路线,您至少可以看看 ZF 中是如何处理 ACL 的。

关于php - 细粒度的访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1517580/

相关文章:

PHP 输入 GET 变量清理

从第一个 binlog 位置开始的 MySQL 主从复制

mysql - 在mysql中查找多边形或循环上的点的位置

facebook - 使用 Facebook OAuth 进行 Apache Shiro 身份验证

c# - 授权角色 WebAPI oauth owin

PHP:如何从具有科学记数法/指数格式的 Excel 数据中获取字符串格式的数据?

php - 上传视频,使用 PHP 服务器端格式化和编码

reactjs - 使用 Cognito 授权者从 API 网关返回 401 - 无论传入什么内容

php - 如何在 CDbCriteria 中使用 Not Exists 子句进行查询?

mysql - MySQL 中使用 JOINed ORDER 子句进行分页