2017-04-26 101 views
0

我目前正在開發一個應用程序ASP.NET MVC 4,但我也在學習。角色asp.net設置

我想使用角色進行身份驗證,但是我一直在做錯誤的事情。

問題是我不需要更多的角色,我只是想要默認的角色。

<system.web> 

<authentication mode="None" /> 
<compilation debug="true" targetFramework="4.5" /> 
<httpRuntime targetFramework="4.5" /> 
<roleManager enabled="true" /> 

在控制器

[Authorize(Roles = "Administrator")] 
public class AccountController : Controller 
{} 

而且在登錄後的方法我想將用戶添加到該角色。

if (!Roles.IsUserInRole(saveAccount.Username, "Administrators")) 
    Roles.AddUserToRole(saveAccount.Username, "Administrators"); 

但每次我登錄,並嘗試重定向到另一個頁面我得到這個

HTTP Error 401.0 - Unauthorized You do not have permission to view this directory or page. 

可有人指導我,好嗎?

+0

您可以確認用戶是否分配給數據庫中的管理員角色? – Kostis

+0

我沒有角色的數據庫,它是必須的嗎?因爲我只是想限制註冊用戶。關鍵是我只有一種類型的用戶... –

+0

您必須以某種方式將用戶分配給一個或多個角色,並且我很難知道如何在不保留角色及其分配的情況下如何做到這一點一個數據庫。無論如何,錯誤是明確的。用戶在指定的角色中不是*,因此是未經授權的(401)。 –

回答

0

角色是授權,認證是另一個過程。

如果你需要的只是限制對已知用戶,則:

  • 創建用戶登錄視圖/通
  • Implemente窗體上的web.config部門認證<system.web>
  • 拒絕匿名用戶

<system.web> 
    <compilation debug="true" targetFramework="4.6.1" /> 
    <httpRuntime targetFramework="4.6.1" /> 
    <authentication mode="Forms"> 
      <forms all parameters needed to a connection's forms></forms> 
    </authentication> 
    <authorization> 
     <deny users="?" /> 
    </authorization> 
</system.web> 
+0

非常感謝。這是我需要的。 –

0

將用戶添加到角色時,必須使用UserId而不是用戶名。

您還必須在Roles表中創建一個包含所需角色名稱的記錄。

使用RoleManager創建新角色。

 ApplicationDbContext context = new ApplicationDbContext(); 
     var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context)); 

     if (!roleManager.RoleExists("Admin")) 
     { 

      //Creating Admin role 
      var role = new Microsoft.AspNet.Identity.EntityFramework.IdentityRole(); 
      role.Name = "Administrator"; 
      roleManager.Create(role); 
     } 

     if (!Roles.IsUserInRole(#yourUserId, "Administrator")) { 
      Roles.AddUserToRole(#yourUserId, "Administrator"); 
     } 

(數據庫爲用戶和角色是DefaultConnection下在服務器資源管理器中的數據連接區)。

+0

用程序中的UserId替換'#yourUserId'。 –