2016-05-07 2 views
2

Ich erstelle eine Mitarbeiter-Scheduling-Site in ASP.net MVC 6. Ich habe eine employee Tabelle, shift Tabelle und eine shiftEmployee Tabelle, um die viele zu viele Beziehung zu behandeln.MVC 6 - Wie erfordert man ein Passwort, um die Controller-Aktion auszuführen?

Es ist so konfiguriert, dass sich jeder Mitarbeiter mit seiner Mitarbeiter-ID-Nummer und einem Passwort bei der Site anmeldet. Dann können sie jede zukünftige Verschiebung sehen, für die sie geplant sind. Sie müssen jede zugewiesene Verschiebung in einem Prozess bestätigen, der als "Ziehen ihrer Nadel" bekannt ist.

Bis jetzt funktioniert alles wie erwartet. Mein Ziel und meine Frage ist dies:

Wenn ein Mitarbeiter ihre PIN für jede Schicht zieht, möchte ich, dass sie diese Aktion bestätigen müssen, indem sie ihr Passwort erneut eingeben, wobei der Benutzer bereits auf der Website angemeldet ist. Was ist der einfachste/richtige/sicherste Weg, dies zu erreichen?

Die Pull GET/POST-Methoden sind im Grunde die gleichen wie eine Standard-MVC-Bearbeitungsaktion, einfach in Pull umbenannt.

// GET: PullPin/Pull/5 
public IActionResult Pull(int? id) 
{ 
    if (id == null) 
    { 
     return HttpNotFound(); 
    } 

    var shiftEmp = _context.ShiftEmployees.Single(m => m.ShiftEmployeeID == id); 

    if (shiftEmployee == null) 
    { 
     return HttpNotFound(); 
    } 
} 

// POST: PullPin/Pull/5 
[HttpPost] 
[ValidateAntiForgeryToken] 
public IActionResult Pull(ShiftEmployee shiftEmployee) 
{ 
    var user = GetCurrentUserAsync(); 

    pullPin.PinStatusID = 3; // Status ID #3 = Pulled 

    if (ModelState.IsValid) 
    { 
     _context.Update(shiftEmployee); 
     _context.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return View(shiftEmployee); 
}  

Und hier meine ShiftEmployee Klasse ist

public class ShiftEmployee 
{ 

    public int ShiftEmployeeID { get; set; } 
    public int ShiftID { get; set; } 
    public int EmployeeID { get; set; } 
    public int PinStatusID { get; set; } 

    public virtual Shift Shift { get; set; } 
    [JsonIgnore] 
    public virtual Employee Employee { get; set; } 
    public virtual PinStatus PinStatus { get; set; } 

} 
+0

Angenommen, Sie sind Verwenden der MVC6-Vorlage? Das sollte bedeuten, dass Sie ein 'UserManager' Objekt haben. Auf diesem können Sie tun 'UserManager.CheckPasswordAsync (Benutzer, Passwort)' – DavidG

+0

@DavidG Danke, guter Herr. Genau das habe ich gesucht! Wenn Sie Ihren Kommentar als Antwort neu schreiben möchten, bin ich mehr als glücklich, ihn als solchen zu akzeptieren. Danke noch einmal. –

Antwort

0

Im Standard MVC6 Vorlage verwendet es ASP.NET Core Identity für die Login-Funktionalität. Ein Teil dieses Paket ist das Usermanager-Objekt (Sie auch SignInManager unter anderem bekommen.)

Die UserManager Aufgabe, ein Verfahren speziell für die Überprüfung von Kennwörtern hat CheckPasswordAsync genannt und wird wie folgt verwendet:

_userManager.CheckPasswordAsync(user, password) 
Verwandte Themen