symfony2/php:仅将URL限制为特定用户
我知道Symfony2能够在内存中配置用户,如下所示: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: {
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?