我想在設計基於計數的訪問控制時得到一些建議。例如,我想限制客戶可以根據他們的賬戶在我的系統中創建的用戶數量。因此,默認情況下,客戶可以創建2個用戶,但如果升級他們的賬戶,他們可以創建5個用戶等等。 我還需要在類似的基礎上限制更多功能。設計基於計數的訪問控制
應用程序遵循通用模型,因此每個公開的功能都有一個支持表,並且我們有一個類來處理該表上的CRUD操作。該應用程序也運行在多個節點上,並具有分佈式緩存。
我正在採取的方法來實現這個如下 - 我有一個新的表,捕獲功能控制和允許的限制(存儲每個客戶)。 - 我攔截所有表的創建方法,並檢查相關表是否需要應用訪問控制。如果是這樣,我獲取創建實體的數量並與限制進行比較以決定是否允許創建。 - 我正在使用數據庫來處理併發請求時的同步。因此,創建方法被調用後,我使用更新該表下面where子句
其中(count_column + 1)=#countInMemory#
。即只有存儲在DB + 1 =內存中的值時,更新纔會成功。這將確保即使兩個線程同時嘗試創建,也只有其中一個線程能夠成功更新。成功更新的線程獲勝,另一個線程回滾。這樣我就不需要同步應用程序中的任何代碼。
我想知道是否有任何其他/更好的方式來做到這一點。我的應用程序運行在Oracle和MySQL DB上。
感謝您的幫助。
爲了簡化代碼,我不重試。相反,只是拋出一個異常,你的觀點雖然是一個有效的觀點。 另外,我沒有描述的情景,用戶在客戶的整個生命週期中都與客戶相關聯。 最後,我存儲每行的計數,因爲這允許我輕鬆地覆蓋限制。 – Raam