比方說,我有一個Book
實體,其字段爲$grantedTo
,填充了用戶角色。 此字段允許根據用戶角色授予或拒絕對圖書的訪問。使用Symfony,如何根據用戶角色查詢實體?
讓我們考慮另一個實體Library
與OneToMany
關係$books
。
現在,從樹枝的看法,我想這樣做:
{{ myLibrary.grantedBooks }}
其中grantedBooks
方法將返回我所有的圖書允許用戶查看。
但在我的班級圖書館建立這樣一個方法,我需要調用類似isGranted($book->grantedTo)
,我相信這是不可能的,因爲我無法從我的實體內訪問的安全上下文。
所以我想我應該做一個服務,我會注入安全上下文,並從Twig訪問此服務。
我不確定這是最好的解決方案,並且很樂意聽到其他可能性。
感謝Youssef爲你的答案,但它不會工作,因爲如果'grantedTo == User'和我連接爲'Admin',我應該能夠看到這本書,但我不會因爲'User '!='Admin'(這就是爲什麼需要安全環境) – Roubi
請檢查我的編輯 – Youssef
偉大的解決方案!起初我認爲它太複雜了,因爲你沒有注入'authorization_checker'服務而不是'token_storage'和'role_hierarchy',但是這樣做不幸會導致**循環引用**錯誤。您可能需要編輯它,以便使用** EntityListener **而不是** EventListener **,因此僅在庫實體上調用它。這就是我所做的。謝謝! – Roubi