作爲一個簡單的例子,我有用戶,產品和客戶。用戶可以訪問某些產品和某些客戶。如何保持客戶數據隔離
我正在使用edmx文件將我的SQL Server映射到我的代碼並使用linq獲取數據。一個典型的查詢可能是這個樣子:
from prod in ctx.Products
join userProduct in ctx.UserProduct
on prod.Id equals userProduct.ProductId
join user in ctx.UserProfile
on userProduct.UserId equals user.Id
where user.UserName == username // <-- username is a method parameter
select new Product
{
Id = prod.Id,
DisplayText = prod.UserFriendlyText
}
每次我需要從我必須加入對訪問權限表的數據庫中的數據來排除數據的用戶沒有訪問。這意味着如果有人(最終會發生)忘記加入訪問表,用戶將看到太多。有沒有辦法來INCLUDE數據,所以如果我忘記訪問表什麼都沒有顯示?
我也一直在考慮將不同的客戶分成不同的數據庫,因爲他們的數據永遠不會彼此相關,如果我在客戶之間泄漏數據,這將是一個小小的災難。來自同一客戶的用戶之間泄漏的產品很差,但並不重要。
如果它很重要我在C#MVC4 CQRS體系結構中最終讀寫一致性。
我檢查堆棧溢出類似的問題,但所有我能找到的是這個沒有答案之一:
我想一個簡單的存儲庫模式,如方法,接受用戶名作爲參數,並且只返回在'IQueryable'中有權訪問的產品可以工作,但它仍然像我一樣錯誤地可以查詢產品而不加入訪問權限表。 –
然後讓你的開發者不能直接查詢產品。例如,僅爲您的模塊和數據庫API提供Repository接口(然後在運行時使用依賴注入來提供實際的Repository服務)。 –