/// <summary> /// Legt einen Benutzer mit den angebenen Daten an. /// </summary> /// <param name="login">Login des Benutzers.</param> /// <param name="password">Passwort des Benutzers.</param> /// <param name="name">Nachname des Benutzers.</param> /// <param name="firstname">Vorname des Benutzers.</param> /// <param name="title">Anrede des Benutzers.</param> /// <param name="dbContext">Datenbankkontext, mit dem die Transaktion durchgefuehrt werden soll.</param> /// <returns>Den neu erstellten Benutzer.</returns> /// <exception cref="ArgumentNullException"></exception> /// <exception cref="ArgumentException"></exception> public static User CreateUser(string login, string password, string name, string firstname, string title, DataClasses1DataContext dbContext) { if (string.IsNullOrEmpty(login)) { throw new ArgumentNullException("Der Benutzername darf nicht leer sein."); } if (login.Length < 3) { throw new ArgumentException("Der Benutzername muss mindestens 3 Zeichen lang sein."); } CheckPassword(password); if (string.IsNullOrEmpty(name)) { throw new ArgumentNullException("Der Name darf nicht leer sein."); } // Salt und Passwort-Hash berechnen. SaltedHash sh = new SaltedHash(); string passwordHash = string.Empty; string salt = string.Empty; sh.GetHashAndSaltString(password, out passwordHash, out salt); var user = new User() { LogDBContext = dbContext, Login = login, Password = passwordHash, Salt = salt, IsLocked = false, Person = new Person() { LogDBContext = dbContext, FirstName = firstname, Name = name, Title = title } }; dbContext.User.InsertOnSubmit(user); dbContext.SubmitChanges(); dbContext.WriteLogItem("Benutzer " + login + " wurde angelegt.", LogTypes.INSERT, user.Id, "User", user.PersonId); return user; }
/// <summary> /// Ermoeglicht es, das Passwort eines Benutzers zu setzen. Der im dbContext uebergebene Benutzer muss dafür das Administratorrecht "ADMIN_PASSWORT_AENDERN" besitzen. /// </summary> /// <param name="newPassword">Das neue Passwort.</param> /// <param name="dbContext">Datenbankkontext für die Transaktion.</param> public void ChangePassword(string newPassword, DataClasses1DataContext dbContext) { CheckPassword(Password); var adminUser = dbContext.User.SingleOrDefault(q => q.Id == dbContext.LogUserId); if (adminUser == null) { throw new Exception("Der Administrator-Benutzer konnte nicht gefunden werden."); } if (!adminUser.HasPermission("ADMIN_PASSWORT_AENDERN")) { throw new Exception("Sie besitzen nicht die Berechtigung, Passwörter von anderen Benutzern zu ändern."); } SaltedHash sh = new SaltedHash(); string passwordHash = string.Empty; string salt = string.Empty; sh.GetHashAndSaltString(newPassword, out passwordHash, out salt); if (this.LogDBContext == null) { this.LogDBContext = dbContext; } this.Password = passwordHash; this.Salt = salt; }
/// <summary> /// Aendert das Passwort des Benutzers. /// </summary> /// <param name="newPassword">Neues Passwort.</param> /// <param name="oldPassword">Altes Passwort.</param> /// <param name="dbContext">Datenbankkontext für die Transaktion.</param> public void ChangePassword(string newPassword, string oldPassword, DataClasses1DataContext dbContext) { CheckPassword(newPassword); SaltedHash sh = new SaltedHash(); if (sh.VerifyHashString(oldPassword, this.Password, this.Salt)) { if (this.LogDBContext == null) { this.LogDBContext = dbContext; } string passwordHash = string.Empty; string salt = string.Empty; sh.GetHashAndSaltString(newPassword, out passwordHash, out salt); this.Password = passwordHash; this.Salt = salt; } else { throw new Exception("Das alte Passwort konnte nicht verifiziert werden."); } }