使用实体框架保护数据有哪些选项/解决方案?
我在这里不讨论表单登录等,只是假设用户是否经过身份验证。
为了说明,我附上了我的一个 web api 控制器,我想知道这是否是这样做的方法。我问的原因是我想知道是否有比将所有这些逻辑写入要在所有控制器中公开的数据更简单的方法。
此外,当研究像这样的系统时,我可以将 $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();
}
考虑到它,我想念的是我的数据库中的视图模型,具体取决于用户的状态。在同一个数据库上创建两个实体框架,一个用于有限的数据显示,一个用于更高级的操作,是否是一种解决方案?