私の会社のasp.NET MVC5イントラネットWebサイトを作成しています.Active Directoryのユーザー役割に応じて承認と動的メニューを実装したところで、制限を適用する必要がありますアクセス。私はMSDN/Technetで[Authorize(Role="<YourRole>")]
を使用して承認を適用できると私はそれを完全に動作させることを読んだ。私の問題は、私は20種類の役割を持っており、それぞれの役割はDocuments
とCategories
と私のMSSQLデータベースにリンクしています。これは、文書やリソースにアクセスしたい場合は、まずDB内の対応するエントリを見つけなければならないことを意味します(必要があればこれをさらに説明できます)。したがって、[Authorize]
属性の認可を実装する場合は、その行が存在するかどうかを確認するためにDBをチェックしなければなりません。私は静的クラスでそれを行うために始めている:ASP.NET MVCで役割の権限を最適化
public static class CustomRoles
{
public const string Role1 = "Role1";
public const string Role2 = "Role2";
//And so on ...
}
:
[Authorize(Roles=CustomRoles.Role1+","+CustomRoles.Role2)]
public ActionResult Index(){}
あなたが長くて退屈になり、それぞれの役割のためにこれをやって想像することができます。
私の質問:あなたはこれを行うためのより簡単な方法を知っていますか?手動で各文書(何千も)をチェックし、別の表でどのようなプロファイルが関連付けられているかを調べ、対応する承認を適用する必要があるためです。そして、技術的には、私のダイナミックメニューはあなたが利用できないものを見ることができないので、これを処理することになっていますが、URLを使って何かにアクセスすることができます。
そしてまた:私のDBにはすべての役割が登録されているわけではありませんが、ほとんどのユーザーは約140の役割を持っていますが、データベースに登録されているのはわずか1または2です。これはパフォーマンス上の問題を引き起こすでしょうか? Claims
を作成してDBに属していないものを除外することができますが、私はそうしたくないと思います。あなたができる
私はあなたが何を望んでいるか分かりませんでしたが、私はあなたの問題を持っていると思います。カスタムのauthorize属性が必要です。この記事をチェックしてください。http://www.diaryofaninja.com/blog/2011/07/24/writing-your-own-custom-aspnet-mvc-authorize-attributesカスタムの書き方を教えています。 – Alexrgs