Asp.net-Mvc

如何在 MVC 5 中使用使用者身份中的角色

  • April 30, 2017

我想在 mvc 5 中使用 asp.net useridentity,我執行以下步驟:

1)創建一個mvc項目。

2)創建我自己的數據庫並將web.config形式的連接字元串更改為:

3)我執行項目並創建一個新使用者以將相關表添加到我的數據庫中。

4)我想在accountControler中註冊一個像這樣的程式碼的使用者後向使用者添加一個角色:

public async Task<ActionResult> Register(RegisterViewModel model)
 {
    if (ModelState.IsValid)
       {
           var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };

           IdentityResult result = await UserManager.CreateAsync(user, model.Password);
           if (result.Succeeded)
           {
               //******************* Add Role To User  **************
               if (!Roles.RoleExists("Member"))
                   Roles.CreateRole("Member");
               Roles.AddUserToRole(model.Email, "Member");
               //****************************************************

               await SignInAsync(user, isPersistent: false);
               // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
               // Send an email with this link
               // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
               // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
               // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

               return RedirectToAction("Index", "Home");
           }
           else
           {
               AddErrors(result);
           }
       }

       // If we got this far, something failed, redisplay form
       return View(model);
   }

5)我添加

<roleManager enabled="true">

進入:

<system.web></system.web>

當我創建一個新使用者時,我的使用者註冊得很好,但使用者沒有添加到角色中,當我這樣做時 VS 在 App_Data 中創建一個名為“ASPNETDB.MDF”的新數據庫。所以我找到了一篇新文章,解釋了 web.config 中的角色提供程序設置,並且:

6)我添加

<roleManager enabled="true">
 <providers>
   <clear/>
   <add name="AspNetSqlRoleProvider" connectionStringName="DefaultConnection" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
 </providers>
</roleManager>

進入 :

<system.web></system.web>

但是當我想註冊新使用者時,我發現了這個錯誤:

找不到儲存過程“dbo.aspnet_CheckSchemaVersion”。

現在我認為我的問題是當我執行第 3 步時,它不會完全創建使用者身份數據庫和儲存過程!我是否對 MVC 5 使用角色 true ?請幫我解決這個問題!

當你寫

!Roles.RoleExists("Member") 

您沒有使用 ASP.NET 標識!相反,您應該使用ApplicationRole它來擴展IdentityRole

此外,您無需AspNetSqlRoleProvider在配置文件中說明。Asp.Net Identity 是不同的。在 Asp.Net Identity 中有一個名為ApplicationRoleManagerApp_Start 文件夾的類。

您不應該使用 Asp.Net Identity,就好像它是舊的簡單成員一樣。

或者,檢查 Identity 的 beta(這意味著事情可能會改變)版本,以了解有關如何在 Identity 中執行的更多資訊。

以下是如何開始:

  • 創建一個新項目:選擇空模板(不是 MVC 不是 WebForm)
  • 通過 nuget 安裝 Asp.Net 身份範例
PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre
  • 編輯命名空間以匹配您的舊項目命名空間
  • 如果您想將一些文件夾從舊項目複製到新項目,請複制您的 (Controllers, Views,…) 而不是配置文件。

在這裡,您可以按如下方式創建角色:

           var role = new IdentityRole("roleName");
           var roleresult = await RoleManager.CreateAsync(role);

並創建使用者並將其添加到特定角色,您將使用它

          var user = new ApplicationUser
           {
               UserName = "tresorunikin",
               Email = "tresorunikin@bellashada.com",
               EmailConfirmed =true
           };

           var userResult = await UserManager.CreateAsync(user, "123@Strong.Password");
           if(userResult.Succeeded){
           string[] roles =new string[]{"admin","seller","other"};
          var roleResult = await UserManager.AddToRolesAsync(user.Id, roles);
           if(roleResult.Succeeded){
               //Here, user has been added to roles
            }
          }

所有這些都是由Pranav RastogiMicrosoft 的身份團隊之一為您完成的。

請注意,對於這些範例,您的目標是 System.Web.Mvc 的新(測試版)版本,它比 System.Web.Mvc 5.0.0.0 更新如果我沒記錯的話,測試版是 System.Web.MVC 5.0.1.2 或類似的版本那

要了解有關身份的更多資訊, 請點擊此處

更新 範例中的版本是:System.Web.Mvc 5.2.1.0

引用自:https://stackoverflow.com/questions/26400251