小编Ram*_*iss的帖子

Symfony2 - 为URL保护特定的HTTP方法

所以,我正在尝试在Symfony2中创建一个RESTful API,但我遇到了安全问题.

比方说,我想用API创建一个新用户.我会做以下要求:

POST /api/v1/users.json HTTP/1.1

所有客户端都应该可以访问此URL,因此无需进行身份验证.但是,假设我想要请求所有用户的列表.根据REST的想法,我应该提出一个GET请求:

GET /api/v1/users.json HTTP/1.1

当然,我不希望每个人都可以访问此列表,因此我必须在Symfony2中保护它.当然,以下内容不起作用,因为它保护整个URL模式,而不是HTTP方法:

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        in_memory:
            users:
                user:  { password: userpass, roles: [ 'ROLE_USER' ] }
                admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }

    firewalls:
        secured_area:
            pattern:    ^/
            anonymous: ~
            http_basic:
                realm: "Social Portal API"

    access_control:
        - { path: /api/v1/users.json, roles: ROLE_ADMIN }
Run Code Online (Sandbox Code Playgroud)

那么,是否有一个access_control保护HTTP方法的指令的秘密参数?或者还有其他方法吗?我试过使用JMSSecurityExtraBundle:

/**
 * @Secure(roles="ROLE_ADMIN")
 */
public function listAction()
{
    return new Response('Cubilon\\SocialPortal\\APIBundle\\Controller\\UserController', 200);
}
Run Code Online (Sandbox Code Playgroud)

哪个应该保护这个方法,但它不起作用......

如何将某种HTTP方法与URL模式结合使用? …

security api rest symfony

10
推荐指数
2
解决办法
3859
查看次数

从另一个包修改包配置

我想知道是否可以修改另一个捆绑包中的捆绑配置.比方说,我正在使用具有以下配置的FOSUserBundle:

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: Acme\UserBundle\Entity\User
Run Code Online (Sandbox Code Playgroud)

现在,我想在加载特定扩展名时更改用户类(AcmeFoobarExtension).是否可以在加载时更改配置AcmeFoobarExtension?例如:

<?php
namespace Acme\FoobarBundle\DependencyInjection;

// use statements for dependency injection

class FoobarExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $container->setConfiguration(
            'fos_user.user_class',
            'Acme\FoobarBundle\Entity\User'
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?或者说它依赖注入的目的?

编辑:显然有一个针对Symfony 2.2 的拉取请求,它解决了这个想法/问题.

编辑2:现在可以在Symfony 2.2中找到它(在食谱中一篇文章).

dependency-injection symfony

8
推荐指数
1
解决办法
2970
查看次数

标签 统计

symfony ×2

api ×1

dependency-injection ×1

rest ×1

security ×1