2017-04-26 3 views
0

Ich entwickle gerade eine App mit ASP.NET MVC 4, aber ich lerne auch.Rollen asp.net Einstellungen

Ich möchte Rollen für die Authentifizierung verwenden, aber etwas, was ich falsch mache.

Der Punkt ist, dass ich nicht mehr Rollen brauche, ich will nur den Standard.

<system.web> 

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

Bei Controller

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

Und im LogIn post-Methode Ich möchte Benutzer dieser Rolle hinzuzufügen.

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

Aber jedes Mal wenn ich anmelden und versuchen, auf eine andere Seite zu umleiten ich dieses

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

Kann mir jemand führen, bitte?

+0

Können Sie bestätigen, ob der Benutzer der Administratorrolle in der Datenbank zugewiesen ist? – Kostis

+0

Ich habe keine Datenbank für Rollen, es ist ein Muss? Weil ich nur den Zugriff auf registrierte Benutzer beschränken möchte. Der Punkt ist, dass ich nur einen Typ von Benutzern habe ... –

+0

Sie müssen irgendwie einen Benutzer einer oder mehreren Rollen zuweisen, und ich bin schwer zu sehen, wie Sie das tun würden, ohne die Rollen und ihre Zuweisungen in eine Datenbank. Unabhängig davon ist der Fehler explizit. Der Benutzer ist * nicht * in der angegebenen Rolle und ist daher nicht autorisiert (401). –

Antwort

0

Rollen sind Autorisierung, Authentifizierung ist ein weiterer Prozess.

Wenn Ihre Notwendigkeit nur auf bekannte Benutzer zu beschränken, dann gilt:

  • mit Benutzer eine Login-Ansicht erstellen/pass
  • Implemente Formularauthentifizierung auf web.config Abschnitt <system.web>
  • anonyme Benutzer Verweigern

.

<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

Vielen Dank. Das ist das, was ich benötige. –

0

Wenn Sie einen Benutzer zu einer Rolle hinzufügen, müssen Sie die UserId verwenden, nicht den Benutzernamen.

Sie müssen auch einen Datensatz in der Tabelle Rollen mit dem Namen der gewünschten Rolle erstellen.

Verwenden Sie RoleManager zum Erstellen einer neuen Rolle.

 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"); 
     } 

(Die Datenbank für die Benutzer und Rollen ist unter DefaultConnection im Bereich Datenverbindungen innerhalb Server-Explorer).

+0

Ersetzen Sie "#yourUserId" durch die UserId in Ihrem Programm. –

Verwandte Themen