我正在一個有多層安全性的網站上工作。最基本的安全級別由驗證用戶身份是否正確的自定義授權屬性來處理。對於API上的細粒度授權,哪種方法是正確的授權方法?
我們使用Authorize方法在控制器中裝飾方法,這可以防止未經授權的用戶訪問這些調用。
但是,我們也有一些細粒度的權利要求。例如,來自公司A的用戶不應該能夠修改來自公司B的任何用戶。因此,儘管A公司和B公司的管理員都有權從API調用「UpdateUser」,但公司A不應該更新公司B的用戶之一。
目前,控制器內部正在處理跨公司訪問的限制。我遇到的問題是,我們介紹的每種新方法都包括代碼的複製和粘貼,或者包含非常類似的變體。
這就是說,我不確定它是否屬於服務(我們稱之爲UserService)。
所以選擇我已經有:
執行控制器內部檢查,看是否請求更新的用戶是同一家公司的一部分,爲使用者更新
執行在服務內部進行相同的檢查。
來自社區的任何建議。
第二種方法的優點是代碼不需要在控制器中重複。當多個控制器調用相同的服務方法時,好處很明顯 - 底層的檢查是一致的,代碼不會重複。
第二種方法的缺點是,現在我的服務需要知道已認證的用戶。這給單元測試帶來了一些問題。
對於這些細粒度權利類型,哪些模式被認爲是「最佳實踐」?