2017-06-22 9 views
0

これは数時間の間これに固執していますので、いくつかの助けに感謝します!3つのログインが1つのログインページを使用しています

私は3つの役割を持ちたいと思っています。私のシステム上ですべてを行うことができる「スーパーユーザー」、特定のことを行うことができる「管理者」、一般的な「ユーザー」だけです。

「ユーザー」は、「管理者」または「スーパーユーザー」によって承認されるまで、システムにアクセスできません。

私は私のデータベースを設定して、すべての役割がのUserProfile、webpages_Membershipに沿って存在し、その他の役割は

私は、単一のログインページを持っていると思います。 3つの役割すべてがそこにログインできるようになりますが、すぐに登録してすぐにアクセスできる人には問題があります。 「ユーザー」の役割を割り当てるまで、ログインできるユーザーを制限する方法はありますか?ここで

は私のアカウントコントローラのログインです:

[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)) 
     { 
      return RedirectToLocal(returnUrl); 
     } 

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

私は[承認]をいじるとUser.IsInRole(「ユーザー」)が、何も支援していないしてきました。

すべてのヘルプは大歓迎です!

答えて

0

あなたは認証と承認の概念を混同しています。アクティブなユーザーは誰でも認証でき、問題はありません。誰かが新たに登録されてサインインすると、何かへの「アクセス」が許可される前に、それは問題ありません。彼らには、アクセスがまだない、または基本的に何もできないサンドボックスにリダイレクトされたというメッセージが表示されます。

承認は全く別のレイヤーです。異なる役割のサイトの特定の領域を認可し、その役割に属するユーザーのみがその領域にアクセスできます。ロールのリストとともに、Authorize属性を使用してこれを行います。例:

[Authorize(Roles = "Superuser,Admin")] 
public ActionResult SensitiveAction() 

これらの役割のユーザーのみがこの操作にアクセスできます。他の人は拒否されます。さらに、あなたは役割に基づいて、これらの領域へのリンクと、そのようなを非表示にすることができます:

@if (User.IsInRole("Superuser") || User.IsInRole("Admin")) 
{ 
    <a href="/admins/only">Admins Only!</a> 
} 

ユーザーがそれらの役割で、その後、これを見ることはありませんありません。

+0

認証されたが認証されていないユーザーをアカウントコントローラ経由で別のページに送信するにはどうすればよいですか? –

+0

これは 'Authorize'属性を介して自動的に行われますが、手動で処理する場合や非常に特殊な処理を行う場合は、ユーザーが特定のロールに属しているかどうかを確認するだけです(' User.IsInRole( "Role") ' )、条件付きでそれに応じてリダイレクトします。独自のアクションフィルタ(通常は 'AuthorizeAttribute'から派生しています)を作成して、より多くのカスタム処理を行い、' Authorize'の代わりにそれらを使用することもできます。それはあなた次第です。すべてのツールがあります。それらを利用するだけです。 –

+0

私は正直なところ、User.IsInRole( "役割")を試しましたが、それらのどれも私は何も得ていませんでした。私は自分のアクションフィルタを次に作成しようと考えています。助けてくれてありがとう。私がそれを理解することができれば、私はあなたに戻ってくるだろう。 –

関連する問題