我目前正在設計一個貸款管理系統,該系統將在一家擁有獨立分支機構和總部的全島公司中實施。該系統的主要用戶是恢復人員、分行經理、區域經理和總部工作人員。我需要一種方法,當每個用戶登錄系統時,他們只能看到與他們相關的數據。例如,追收人員只能訪問與他們相關的貸款,分行經理只能看到他們的分行貸款,總部人員可以看到所有貸款等。最初我提出了以下設計。loan-------------------id PKcapitalinterest......recovery_officer_id FKbranch_id FKregion_id FK由于每筆貸款都有相關的recovery_officer_id、branch_id、region_id列來過濾數據。我決定創建一個帶有過濾器的表filter-----------user_id FKcolumn_namevalue因此,在代碼中,我可以將相關的列名稱值附加到WHERE子句以過濾結果。對于總部用戶,由于沒有過濾器,我可以忽略添加WHERE子句。但我覺得每次都附加一個可變長度的WHERE子句將是一項乏味的任務。此外,如果查詢當前有一個 WHERE 子句,我應該編寫一個通用代碼,將過濾器子句附加到它上面。因此必須有更好的方法來實現這一點。我使用 MySQL 作為我的數據庫,并使用 Go 作為我的服務器端語言。任何設計理念都受到高度贊賞。
1 回答

鴻蒙傳說
TA貢獻1865條經驗 獲得超7個贊
計劃 A(首選):將檢查構建到連接用戶和數據庫的應用程序代碼中。也就是說,沒有人直接登錄數據庫。
我更喜歡從頭開始構建 WHERE 子句。編輯現有的 WHERE 會變得很棘手。想象一下以 OR 子句結尾,然后加上 AND 子句的混亂情況。精明的用戶可能會說
SELECT ... FROM ... WHERE 1 OR 2;
然后你加上這樣的東西:
SELECT ... FROM ... WHERE 1 OR 2 AND role = 'clerk';
你猜怎么著——店員可以看到一切。
B 計劃:大量的視圖和列級權限,以防止個人看到不應該看到的東西。
- 1 回答
- 0 關注
- 141 瀏覽
添加回答
舉報
0/150
提交
取消