2017-03-02 12 views
0

おはようございます。MVC 4データベースに格納されているアプリケーション、Windows認証、カスタムロール

私のMVC 4アプリケーションには次の要件があります。

  1. Windows認証情報を使用した認証(自動)。
  2. 一度認証された特定のページ/ビュー/コントローラは、データベーステーブルのセットで定義されているロールに基づいて制限されます。

ここでEDIT

は私がこれまでにしようとしているものです:

  1. ファイルの私のGlobal.asaxでこれを入れてWindows認証

  2. を使用するために私のMVCアプリケーションを設定しますif(HttpContext.Current.User!= null) { string [] roles = {"testmyrole"}; GenericPrincipalプリンシパル= new GenericPrincipal(HttpContext.Current.User.Identity、roles); Thread.CurrentPrincipal = HttpContext.Current.User = principal; bool test = User.IsInRole( "testmyrole"); }

しかしHttpContext.Current.Userは常にnullです...

文字列[]の役割は、最終的にデータベースを呼び出すことによって移入されます...ハードコードはちょうどテストするためのものです今。

どのようなアイデアを私のMVCアプリケーションに配置することができますので、どのようなビューでもこのコードが実行されるので、私は他のコントローラで次のコードを使用してロールを設定します。

[Authorize(Roles ="testmyrole")] 
public ActionResult Index() 
{ 
... do other fun stuff here 
} 

ありがとうございます。

Corey

+0

こんにちは...ちょっとしたアドバイス。誰かが最初に何かをしようとしない限り、あなたは "詳細な"解決策を得るのに苦労します。 – Wheels73

答えて

0

私は私の問題の解決策を見つけたかもしれないと思います。だからここ

は私がやったことで次のように

  1. は私のviewStart.CSHTMLファイルを変更:
  2. SMTRApp.Businessを@using

@using System.Security.Principal;

@usingシステム。スレッディング;私は、SQLの役割ベースのセキュリティを実装するために私のコントローラの先頭に次のコードを置くことができました

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    string[] roles = BusinessLayer.BLGetUserRoles(User.Identity.Name).ToArray(); 
    GenericPrincipal principal = new GenericPrincipal(User.Identity, roles); 
    Thread.CurrentPrincipal = System.Web.HttpContext.Current.User = principal; 
} 

[Authorize(Roles = "Accounting, Analyst, ETL")] 

は関係なく、役割ベースのセキュリティを実装しないために、これよりもより良い方法ありますビューはどのように呼び出されますか?

ご意見をいただければ幸いです。

Corey

関連する問題