現在、データベースの権限を取得できるように、[承認]フィルタの拡張機能を使用しています。すべてが機能しますが、パフォーマンスの問題は確実です。私はデータベースにクエリを送り、許可を求めるたびに、これを判断する最良の方法ではありません。だから私はこれらのデータをセッションに入れることを考えました。データベースからのデータを、セッションオブジェクト(LINQ)とデータベースの中に入れる最も速い方法は何ですか?データベースからのデータをMVCのセッションに入れます
は今、これは次のようになります。
var _allowedRolesDB = context.sec_RolesInCAs
.Where(rl => rl.MenuControlName == controllRights && rl.MenuActionName == actionRights)
.Select(rl => rl.RoleName);
foreach (var r in _allowedRolesDB)
{
RolesDB = RolesDB + r.ToString() + ",";
}
が、私はMySuperSessionSomethinkがデータベースから一回取得したデータを保持します
var _allowedRolesDB = MySuperSessionSomethink
.Where(rl => rl.MenuControlName == controllRights && rl.MenuActionName == actionRights)
.Select(rl => rl.RoleName);
foreach (var r in _allowedRolesDB)
{
RolesDB = RolesDB + r.ToString() + ",";
}
に変更します。どのように私はこれを行うことができます任意のアイデア? Txのヘルプ。
BIGGER PICTURE
[OK]をクリックします。私はより大きな画像を表示します。 全体のアイデアは、カスタム認証フィルタを作成することです。
[CustomAuthAttribute("Home,Index", Roles = "SuperAdministrator")]
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
これの目標は何ですか。すべての利点と、データベースの権利に関する情報を保持するなどの追加機能を備えたauthorize属性を作成します。
今、私は何をすべきかは、次のとおりです。
public CustomAuthAttribute(params string[] controllerAction)
{
IPrincipal user = HttpContext.Current.User;
string userName = user.Identity.Name;
**... some code .. and take all allowed roles and check it have permissions**
var _allowedRolesDB = context.sec_RolesInCAs
.Where(rl => rl.MenuControlName == controllRights && rl.MenuActionName == actionRights)
.Select(rl => rl.RoleName);
foreach (var r in _allowedRolesDB)
{
RolesDB = RolesDB + r.ToString() + ",";
}
**... some code .. thesame withs single users**
}
この後、私は
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
**... can acces or not part of code ...**
if (_rolesSplit.Any(user.IsInRole))
{
return true;
}
}
を使用しますが、問題があります。毎回私はデータベースに許可について尋ねるが、このIMHOは最良の方法ではない。今私のアイデアは1人のユーザーのためのすべてのアクセス権を取って、彼がハイになったときに彼のセッションに入れます。たぶん私は間違っているこの方法は、問題を作るだろうが、データベースに保管し、権限についてのすべての時間を尋ねるも良いアイデアではない:)。データを1つまたは2つの質問の後でデータベースに取り込み、コードに使用する方が良いでしょうか?
完璧に動作するようです。 –