据我所知,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
/客户名称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 }
答案 0 :(得分: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;
}