2011-10-03 121 views
1

如何防止用戶更新其在數據庫中的行。行級別安全

例如: 用戶負責學校。他們可以改變那所學校的領域,但只有那所學校。

這樣:SchoolId,OWNERID,名稱,******中國

我已經實現了一個功能: CanEditSchool(SchoolID)如果用戶是不是拋出一個異常的具體學校的所有者。

有沒有更好的解決方案?我使用linq2sql作爲orm。

回答

0

一個解決方案,這似乎不是最佳的,將是爲用戶創建一個視圖,僅包含在其管轄下的學校:

CREATE VIEW `v_jimmy` AS 
    SELECT * FROM `schools` 
    WHERE SchoolId = 5; 
+0

我不認爲這在OP的應用中完全可用。 –

+0

我不會推薦一個視圖,但傳遞用戶標識並僅返回水平分區值的表值函數可能值得考慮。有了這個,你可以刪除學校表上的選擇權限,並像LINQ to SQL一樣通過LINQ to SQL訪問它,只需傳入一個ID參數即可。更新變得更加棘手(或使用Stored Procs)。儘管如此,你對服務器索引的訪問鬆散。 –

0

你的控制器動作應該檢查您的安全功能,以確保登錄的用戶能夠在問題編輯的項目。如果不是,您應該將它們發送給'權限被拒絕'類型的頁面/視圖。但是,您的CanEditSchool函數並不需要拋出異常。它的名字暗示它會返回一個bool;如果他們可以編輯它,則爲true,否則爲false