symfony - RESTFul OAuth 与 FOSOAuthServer/FOSRest 和 FOSUser

标签 symfony fosuserbundle fosrestbundle fosoauthserverbundle

我很难完全理解解释的客户端创建的概念 here 。 我按照帖子设置了 OAuthBundle,并尝试进行所需的更改以符合 FOSUser。虽然我不确定它是否完美。

我的情况

  • 我的网站是 RESTFul API,仅返回 json 或 xml。我的前端将使用 AngularJS
  • 我组合了 FOSUser、FOSRest 和 FOSOAuth,配置中可能存在错误。

问题

我完成了文章第一部分到 doctrine:schema:update 命令的设置。现在我应该创建一个客户端。

如何为不同角色的 ^/api 部分设置安全性?

示例:

  • 匿名用户可以访问 POST /api/users,但不能访问 GET/api/users。
  • 只有拥有 ROLE_ADMIN 的用户才能访问 DELETE /api/users/{id}

为了进行测试,我使用 Postman (支持 OAuth1 和 2,以及其他身份验证方式)。

最佳答案

在 security.yml 中使用表达式

为了通过(请求)-方法的条件组合来保护某些路由AND (用户)-角色 ...

...您可以使用 Expressions 在您的 security.yml 中。

更多信息可以在文档章节Securing by an Expression中找到。

示例

只有具有ROLE_ADMIN角色的用户才可以使用DELETE请求访问/api/users/{id}:

# app/config/security.yml
security:
    # ...
    access_control:
        - path: "^/api/users/\d+$"
          allow_if: "'DELETE' == request.getMethod() and has_role('ROLE_ADMIN')"

正则表达式解释

  • ^ 开头为
  • \d+ 一位或多位数字(= 用户 ID)
  • $ 字符串结束

关于symfony - RESTFul OAuth 与 FOSOAuthServer/FOSRest 和 FOSUser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26163889/

相关文章:

javascript - FOSJsRoutingBundle 没有看到来自 FOSRESTBundle 的路由

php - @RouteResource 不起作用

mysql - mysql中的DC2Type数组数据类型是什么

Symfony 2.8 FOSUserBundle 在注销时删除 cookie

php - 从 PHP SOAP 服务器获取接收到的 XML

mysql - 整合 Sonata 中的 fosUserBundle 表格

mysql - 两张表,两种关系

php - Symfony2 REST API - 部分更新

php - 在 symfony 中使用 PrePersist

symfony - 执行 phpvendor/bin/simple-phpunit 时未定义方法 ArraySubsetLegacy::exporter()