Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
symfony2/php:仅将URL限制为特定用户_Php_Security_Symfony - Fatal编程技术网

symfony2/php:仅将URL限制为特定用户

symfony2/php:仅将URL限制为特定用户,php,security,symfony,Php,Security,Symfony,我知道Symfony2能够在内存中配置用户,如下所示: providers: in_memory: memory: users: user1: { password: pwd1, roles: [ 'ROLE_USER' ] } user2: { password: pwd2, roles: [ 'ROLE_USER' ] } user3: {

我知道Symfony2能够在内存中配置用户,如下所示:

 providers:
    in_memory:
        memory:
            users:
                user1:  { password: pwd1, roles: [ 'ROLE_USER' ] }
                user2:  { password: pwd2, roles: [ 'ROLE_USER' ] }
                user3:  { password: pwd3, roles: [ 'ROLE_USER' ] }
                admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
我正在建设一个小型网站,将有照片库,只有经过认证的用户才能访问。一个画廊将匹配此路线:
http://mysite/clients/client-name

从Symfony文档中,我可以看到我们可以将路由限制为特定角色。但这不是我想要的,因为我的所有用户(客户机)都将具有角色\u USER。我想要的是将每个
/clients
/client name
路由限制为特定用户。例如,user1可以访问
/clients/john smyth`

我该怎么做

使用访问控制参数,如何用用户替换角色

access_control:
    - { path: ^/clients/john-smyth, roles: ROLE_USER }
您可以编写一个与用户名匹配的路由或路径

下面是一个非常基本的示例(我在没有测试的情况下进行了黑客攻击,因此可能需要一些调试)来帮助您:

class GalleryAccessVoter implements VoterInterface
{
    ...

    public function vote(TokenInterface $token, $object, array $attributes)
    {
        $request = $this->container->get('request');
        $route = $request->get('_route');
        $user = $token->getUser();

        if ($route == 'acme_gallery_show' && null !== $user) {
            $galleryId = $request->request->get('id');
            if ($galleryId == $user->getUsername()) {
                return VoterInterface::ACCESS_GRANTED;
            }
        }

        return VoterInterface::ACCESS_DENIED;
    }

我想你不能在保安室里那样做。在控制器中简单测试用户名($this->getUser();),如果不正确,将其重定向到错误页面投票者或ACL?我需要将用户(完全权限)及其子用户(受限访问)登录到用户的特定子域。我应该使用投票者还是ACL?