2017-06-23 25 views
0

C#アプリケーションに問題があり、何か助けていただければ幸いです。3つのロールが許可されているが、許可されていないアカウントを拒否するログインページ

C#でプロジェクトを作成すると、管理者が権限を与えられていないユーザーがログインできないようにしようとしています。

これは私のアカウントコントローラです。私は、管理者がアプリケーションに入り、他の誰かがビューに行くか、エラーメッセージを表示させることから始めたいと思います。

[AllowAnonymous] 
    public ActionResult Login(string returnUrl) 
    { 
     ViewBag.ReturnUrl = returnUrl; 
     return View(); 
    } 

    // 
    // POST: /Account/Login 

    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Login(LoginModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      WebSecurity.Login(model.UserName, model.Password); 
      if (User.IsInRole("Administrator")) 
      { 
       return RedirectToLocal(returnUrl); 
      } 
      else 
      { 
       WebSecurity.Logout(); 
       return View("RegisterAuthorisation"); 

      } 
     } 
     else 
     { 
      // If we got this far, something failed, redisplay form 
      ModelState.AddModelError("", "The user name or password provided is incorrect."); 
      return View(model); 
     } 
    } 

誰もがElseステートメントに置かれているページにアクセスするだけで、機能していないのです。私のデータベースは問題なく、HTMLにコードを実装しているので、Admins以外のユーザーはすべてのものにアクセスできなくなります。

私が言ったように、私はいくつかの助けに非常に感謝します!

+0

ビューを返すElseステートメント( "RegisterAuthorisation"); ModelState.AddModelError – adopilot

+0

@adopilot nahは動作しません –

答えて

0

ロールマネージャを初期化していない可能性があります。アカウントコントローラーに属性[InitializeSimpleMembership]を追加します。これにより、認証されたときにユーザーのデータがデータベースから取得されます。ユーザーが他のコントローラーからアプリケーションにログインできる場合は、RegisterGlobalFiltersを使用してこれをグローバルに初期化することができます。 this MSDN articleを見てください。

関連する問題