2014-09-10 135 views
1

我正在使用Symfony框架與FOS用戶包。我使用安全上下文來確定顯示哪些菜單項和其他項。Symfony2 - 我可以給匿名用戶一個'ROLE_SOMETHING'

$securityContext = $this->get('security.context'); 
if ($securityContext->isGranted($report['Permission'])){ 
    //add the menu item... 
} 

有什麼辦法給匿名用戶一個'ROLE_USER'的安全上下文嗎?我已登錄用戶正常工作。

我嘗試添加一行:

role_hierarchy: 
    IS_AUTHENTICATED_ANONYMOUSLY: ROLE_USER 

我security.yml希望這將做到這一點,但顯然不是。我搜索了一下並閱讀了文檔。

我想象:

if ($securityContext->isGranted($report['Permission']) 
    || ($report['Permission'] === 'ROLE_USER' && $securityContext->is_anonymous())) 

會的工作,但這種感覺就像樣的黑客(而不是非常DRY)

編輯: 這是一個內部網站。我有一張包含報告名稱的表格。不管是否登錄,都應該能夠看到一些報告。一些報告需要查看權限。我不想創建幾百個用戶,只有少數用戶需要訪問。

+0

你想做什麼?默認情況下,給予用戶角色意味着他需要登錄。 – 2014-09-10 15:29:47

+1

您不能這樣做,因爲僞角色IS_AUTHENTICATED_ANONYMOUSLY僅用於symfony中內置的系統身份驗證,以區分未經身份驗證的用戶在某些路由中輸入的內容防火牆。 – 2014-09-10 15:50:55

+1

另一種方法是使用選民:http://symfony.com/doc/current/cookbook/security/voters_data_permission.html。你最終得到:$ securityContext-> isGranted('view',$ report);所有的邏輯結束在你的選民類。 – Cerad 2014-09-10 15:54:14

回答

1

如果您試圖將訪問權限授予給定的url,爲什麼不直接授權呢?

你有2個方法來實現這一目標:創建防火牆授權或角色中定義的網址

1)防火牆autorization

firewalls: 
     test: 
      pattern: ^/ws // you url or schema url with regex 
      anonymous: true 

2)的網址與角色定義的訪問

access_control: 
     - { path: ^/given-url, roles: IS_AUTHENTICATED_ANONYMOUSLY } 


// in app/config/security.yml 

在這兩種情況下,未經過驗證的用戶和經過驗證的用戶將有權訪問此網址

順便說一句,如果你想測試(爲了顯示一些用戶變量),如果用戶已經驗證過了,只要在樹枝測試

{% if app.user is defined and app.user not null %} 
     The user {{ app.user.username }} is connected. 
    {% else %} 
     No user connected 
    {% end %} 

編輯:基於內容的觀點:中庸之道創建你的行爲路線不符合你的防火牆規則

+0

謝謝,但我有這部分工作。我已對該帖子進行了修改。這是內容創作,也是我需要工作的基於角色的內容。 – eidsonator 2014-09-10 15:36:46

+0

像我的編輯,你應該編輯你的內容視圖的行動路線到不同的網址,爲了不符合你的防火牆規則,然後授予訪問該網址給未經過驗證的用戶 – 2014-09-10 15:43:03

+0

我顯然做了一個非常糟糕的工作,解釋自己今天。抱歉。我想根據安全上下文在控制器內部作出決定,以決定是否需要將項目添加到傳遞給我的模板以進行呈現的數組。即報告列表。 – eidsonator 2014-09-10 15:53:28

相關問題