2017-09-09 83 views
0

我正在使用Symfony3構建API後端,並且有關於如何將字段級別權限應用於PUT端點以更新對象(本例中爲用戶)的問題。Symfony3實體字段級別權限

我的用戶實體具有多個字段,名字,姓氏,用戶名等

如果PUT請求被髮送到/用戶/ {用戶id}端點,我反序列化請求JSON到一個數組,傳數組(以及從數據庫中提取的用戶)導入規範器,該規範器將請求數據應用於用戶屬性。

我想要一個ADMIN能夠更新所有字段,但用戶自己只能夠更新他們的名字和姓氏。

因此,在我的代碼中的某處,我需要在將更新應用於用戶對象之前進行檢查,例如,如果用戶名字段出現在PUT請求中,我需要檢查請求用戶是否是管理員,然後再將該更新應用到用戶對象。

將安全注入標準器看起來像是一個明顯的解決方案,但感覺安全不應該是標準器的問題。

我可以在反序列化請求之後,在傳遞給規範器之前檢查權限,然後只要用戶沒有訪問權限就從數組中刪除字段。如果不是管理員從陣列中刪除[用戶名]。

尋找想法/建議在正確的方式來完成此....

謝謝!

回答

1

想後一些反饋我#symfony IRC有:

我不會有歸一化寫入到用戶。我會讓 規範化程序生成一個DTO,然後在給定目標用戶和用戶採取操作的 權限之後,您將對其進行驗證。

如果該驗證器失敗,則拋出所有東西並返回 權限被拒絕的錯誤,否則將DTO應用於用戶並且 將其保留。

的「驗證」可以是一個形式(建立與給定活性和目標用戶可接受的 修改字段的表格;形式是無效的,如果有 是提交額外的字段)。或者它可能是一個安全投票人,或者你自己的定製機制。