【问题标题】:SLIM Framework - How to make an Access Control List with SLIM?SLIM 框架 - 如何使用 SLIM 制作访问控制列表?
【发布时间】:2014-11-11 12:16:00
【问题描述】:

访问控制列表或 ACL 定义了一组规则,这些规则确定哪些用户组可以访问您的 Slim 应用程序中的哪些路由。

知道如何在 SLIM 中使用访问控制列表吗?

我尝试为我的 REST API 授权创建访问控制列表。

例子:

  • 角色成员只能从资源(/member)访问GET、UPDATE

  • 管理员成员只能从资源 (/admin) 访问 GET、UPDATE、POST、DELETE

知道如何用 SLIM 做到这一点吗?

【问题讨论】:

  • 你见过slim-auth吗?
  • 感谢您的参考:)
  • 告诉我这是否对您有帮助。 :)

标签: rest authorization acl slim


【解决方案1】:

仍在学习,但是...在我的 Slim 路由中,您可以调用控制器上的方法。在该控制器中,为该特定方法命名一个权限。然后只需使用in_array() 在用户的访问数组中查找该值,您可以在用户登录时将其保存在$_SESSION 中。

$this->get('/admin/users', 'AdminController:getUsers')->setName('admin.users');

AuthController 类 > getUsers 方法 >

$permission = "view_users";

if(in_array($permission, $_SESSION['user']['access']) === false) {
  // show flash message, redirect- whatever
}

虽然现在大多数人都使用 Zend Acl,但我并没有走那条路来努力学习。

【讨论】:

    【解决方案2】:

    我也在寻找使用 SLIM 实现资源 ACL 的最佳方式。我认为路由访问控制不是一件好事。在 REST API 中,资源由动态 URL 标识,例如“/member/:id”。

    我认为对路由的权限控制不提供对单个资源的任何安全检查;如果用户对 [/member/1] 具有完全访问权限,则始终可以在 [/member/2] 上执行 DELETE,因为主路由始终是“/member”。

    要识别单个资源,必须知道动态 ID,然后您可以检查用户是否对该特定资源具有权限。

    对通用路由应用 GET、POST、DELETE 检查 [/member] 我认为这不能提供正确的控制。

    【讨论】:

    • 您遇到了基本 ACL 的限制之一,即您最终不得不定义数量荒谬的“资源”(例如,delete/1、delete/2...每个都成为一个单独的资源)。你想要的是attribute-based access control。查看我的项目 UserFrosting(基于 Slim)或 Laravel 的 gates,了解 ABAC 的两个实现。
    • 在不深入研究项目细节的情况下,this implementation of ACL middleware for Slim 中的“可调用对象”似乎允许您正在寻找的那种单资源粒度。
    猜你喜欢
    • 2017-10-11
    • 2015-04-30
    • 2016-04-04
    • 2019-01-11
    • 1970-01-01
    • 2015-08-04
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多