Entity Framework を使用してデータを保護するために、どのようなオプション/ソリューションがありますか?
ここでは、フォーム ログインなどについては説明しません。ユーザーが認証されているかどうかを前提としています。
説明するために、Web API コントローラーの 1 つを接続しましたが、これがその方法であるかどうか疑問に思います。私が尋ねる理由は、すべてのコントローラーで公開するデータにこのすべてのロジックを書き込むよりも、これを行う簡単な方法があるかどうか疑問に思っているからです。
また、自分のクエリに $expand=TrafficImages を追加できる Breezejs や odata などのシステムを調べた場合、ユーザーが自分のホール データベースを取得できるようにしたくありません。
要約すると、ユーザーが機密データをダウンロードできないように公開されたデータを保護するには、どのような方法があるのでしょうか。
[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();
}
それについて考えるとき、私が見逃しているのは、ユーザーの状態に応じて、データベースの最上位にあるビューモデルのようなものです。同じデータベース上に 2 つのエンティティ フレームワークを作成することは解決策になるでしょうか。