簡體   English   中英

Symfony3實體字段級別權限

[英]Symfony3 Entity Field Level Permissions

我正在使用Symfony3構建API后端,並且對如何將字段級權限應用於PUT端點以更新對象(在此示例中為User)存在疑問。

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

如果將PUT請求發送到/ users / {userId}端點,我將請求JSON反序列化為一個數組,然后將該數組(以及從數據庫中獲取的User)傳遞到規范化器中,該規范化器將請求數據應用於User屬性。

我希望ADMIN能夠更新所有字段,但用戶本身只能更新其姓氏和名字。

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

向規范化器中注入安全性似乎是一個顯而易見的解決方案,但是感覺到安全性應該不是規范化器所關心的問題。

我可以在反序列化請求之后,傳遞給規范化器之前檢查權限,然后如果用戶無權訪問,只需從數組中刪除字段,例如,如果沒有admin,則從數組中刪除[username]。

尋找正確的方法來實現這一目標的想法/建議。

謝謝!

想要發布一些我在#symfony IRC中得到的反饋:

我不會將規范化器寫入用戶。 我會讓規范化器生成一個DTO,然后您將根據目標用戶和執行操作的用戶的權限來驗證該DTO。

如果該驗證程序失敗,則將所有內容扔掉並返回權限被拒絕的錯誤,否則將DTO應用於用戶並保留它。

“驗證器”可以是一種表單(構建一個可接受的表單以修改給定活動用戶和目標用戶的字段;如果提交了額外的字段,則該表單無效)。 也可以是安全投票者,也可以是您自己的自定義機制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM