2013-08-25 22 views
0

我理解的Symfony2帶給配置用戶內存這樣的能力:我建設小網站的Symfony2/PHP:限制URL以特定的用戶只

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

我不認爲你可以,在security.yml。在您的控制器中簡單地測試用戶名($ this-> getUser();),如果不正確將他重定向到錯誤頁面 – Tuxes3

回答

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; 
    } 
+0

Voter或ACL?我需要將用戶(完全權限)及其子用戶(受限訪問)記錄到用戶的特定子域中。我應該使用選民還是ACL? –

相關問題