2014-09-02 67 views
0

我有一個問題,那就是確保在我的SOA應用程序中正確授權的最佳實踐/模式是什麼。我有一堆允許用戶訪問某些數據(存儲在數據庫中)的服務。典型場景的一個例子是...在SOA中實現授權

我們有一個EMPLOYEE表,它與PROJECT有一對多的關係。所以一個僱員可以有很多項目。另外每個員工都屬於一個地區。系統的用戶可以編輯員工和項目的信息。但是,每個用戶只能管理少數幾個區域的數據,因此只能修改屬於用戶管理區域的員工及其項目。因此,用戶可以訪問區域A,B,C,並且可以編輯區域A員工的員工/項目數據,但不能編輯區域Z員工。

我有一項服務可讓您編輯員工,另一項可編輯項目。類似地,項目與其他實體有關係,例如, SCHEDULE,我也有服務來編輯這些內容。

但是我的問題是,用戶是否可以通過調用相應的服務來編輯項目或計劃,取決於員工(與這些項目和計劃相關的)屬於哪個區域。因此,對於每一項修改項目或計劃的服務或從員工開始的該層次數據中的任何實體,我都必須查詢相應的員工並強制執行區域約束。考慮到數據庫調用和連接數量(我真正的例子有很多這樣的實體和相應的服務),這可能會變得非常昂貴,我必須在每次服務調用時進行操作。針對我的場景是否有更優雅的輕量級解決方案?

回答

1

首先,我會將這些要求稱爲常規業務規則而不是授權。授權通常在本質上更具通用性,這意味着用戶是被允許訪問特定系統還是被允許調用某個功能(不管參數如何)。其次,基於業務規則視圖,在將業務劃分爲服務之前,應考慮這些業務規則的一致性需求。第三,關於你的陳述「我的真實例子有很多這樣的實體和相應的服務」,它通常不是一個好主意,有與實體相對應的服務。

因此,總之,您需要重新設計您的服務邊界,以便需要執行的規則(以高度一致的方式)包含在單個服務中。一種方法是將某個特定實體的不同部分放入不同的服務中 - 前提是沒有任何業務規則要求這些不同的一致性