如何防止用戶更新其在數據庫中的行。行級別安全
例如: 用戶負責學校。他們可以改變那所學校的領域,但只有那所學校。
這樣:SchoolId,OWNERID,名稱,******中國
我已經實現了一個功能: CanEditSchool(SchoolID)如果用戶是不是拋出一個異常的具體學校的所有者。
有沒有更好的解決方案?我使用linq2sql作爲orm。
如何防止用戶更新其在數據庫中的行。行級別安全
例如: 用戶負責學校。他們可以改變那所學校的領域,但只有那所學校。
這樣:SchoolId,OWNERID,名稱,******中國
我已經實現了一個功能: CanEditSchool(SchoolID)如果用戶是不是拋出一個異常的具體學校的所有者。
有沒有更好的解決方案?我使用linq2sql作爲orm。
取決於你如何處理您的DataContext,你可以使用數據上下文上的LoadOptions。
http://msdn.microsoft.com/en-us/library/Bb386915(v=VS.90).aspx
一個解決方案,這似乎不是最佳的,將是爲用戶創建一個視圖,僅包含在其管轄下的學校:
CREATE VIEW `v_jimmy` AS
SELECT * FROM `schools`
WHERE SchoolId = 5;
我不認爲這在OP的應用中完全可用。 –
我不會推薦一個視圖,但傳遞用戶標識並僅返回水平分區值的表值函數可能值得考慮。有了這個,你可以刪除學校表上的選擇權限,並像LINQ to SQL一樣通過LINQ to SQL訪問它,只需傳入一個ID參數即可。更新變得更加棘手(或使用Stored Procs)。儘管如此,你對服務器索引的訪問鬆散。 –
你的控制器動作應該檢查您的安全功能,以確保登錄的用戶能夠在問題編輯的項目。如果不是,您應該將它們發送給'權限被拒絕'類型的頁面/視圖。但是,您的CanEditSchool
函數並不需要拋出異常。它的名字暗示它會返回一個bool
;如果他們可以編輯它,則爲true
,否則爲false
。
你先生是輝煌的。非常感謝。 – user834252