使用實體框架保護數據的選項/解決方案有哪些?使用實體框架的數據安全
我不談論表單登錄和這裏,只是假設用戶認證與否。
爲了說明,我附上了我的一個web api控制器,我想知道這是否是這樣做的。我問的原因是,我想知道是否有更簡單的方法來完成這項工作,而不是寫所有這些邏輯到在我的所有控制器中公開哪些數據。
此外,當查看像breezejs和odata這樣的系統時,我可以將$ expand = TrafficImages添加到我的查詢中,但我不希望用戶能夠獲取我的洞數據庫。
所以總結一下,有哪些方法可以保護暴露的數據,例如用戶無法下載合理的數據。
[AllowAnonymous]
public object GetTheoryTests()
{
var identity = ((ClaimsIdentity)((ClaimsPrincipal)HttpContext.Current.User).Identity);
//if (HttpContext.Current.User.Identity.IsAuthenticated)
if (!identity.IsAuthenticated)
return db.TheoryTests.Include(t=>t.TrafficImages).Where(t=>t.PublicAvalible)
.Select(t => new { Id = t.Id, Title = t.Title, Images = t.TrafficImages }).AsEnumerable();
if (User.IsInRole("WebAdmins"))
return db.TheoryTests.AsEnumerable();
var key = identity.GetProvider();
var member = db.Members.Include(m=>m.PayedTheoryTests).SingleOrDefault(m=>m.Identities.Any(
i=>i.identityprovider == key.provider &&
i.nameidentifier == key.id));
if(member!=null)
return db.TheoryTests.Include(t => t.TrafficImages).Where(t => t.PublicAvalible).Select(t => new { Id = t.Id, Title = t.Title, Images = t.TrafficImages }).AsEnumerable();
else
return db.TheoryTests.Include(t => t.TrafficImages).Where(t => t.PublicAvalible)
.Union(member.PayedTheoryTests).Select(t => new { Id = t.Id, Title = t.Title, Images = t.TrafficImages }).AsEnumerable();
}
在想着它,我懷念的是像取決於用戶的狀態我的數據庫的視圖模型聯塔辦事處。這是否會成爲在同一個數據庫的頂部創建兩個實體框架的解決方案,一個用於有限的數據顯示,另一個用於更高級的操作?