0

我了解 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 文档中我可以看到我们可以将路由限制为特定角色。但这不是我想要的,因为我的所有用户(客户)都将拥有 ROLE_USER 角色。我想要的是限制每个/clients/client-name route to a specific user. So for instance user1 would have access to/clients/john-smyth`

我怎么做 ?

使用 access_control 参数,如何按用户替换角色?

access_control:
    - { path: ^/clients/john-smyth, roles: ROLE_USER }
4

1 回答 1

1

您可以编写一个与用户名匹配特定路由或路径的Voter 。

这是一个非常基本的示例(我未经测试就拼凑在一起,因此可能需要一些调试)来帮助您:

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;
    }
于 2013-08-26T14:50:40.960 回答