/// <summary> /// Grant access to the specified door using the specified set of credentials. Credentials /// always work in SETS. You need all the credentials in the set for the authorization to pass. /// Make sure to store this information in the database in a way that you can query entire sets /// at a time in the IsAuthorized method. /// </summary> /// <param name="doorId">The door to grant access to</param> /// <param name="credentials">The credentials to be used</param> public void GrantAccess(int doorId, IEnumerable <DoorCredentialDetail> credentials) { var DoorCredential = new DoorCredential { DoorID = doorId }; Db.DoorCredentials.Add(DoorCredential); Db.SaveChanges(); foreach (var DC in credentials) { Db.DoorCredentialsDetails.Add(new DoorCredentialDetail { CredentialID = DC.CredentialID, DoorCredentialID = DoorCredential.DoorCredentialID, Value = DC.Value }); } Db.SaveChanges(); }
protected override void Seed(SecurityContext ctx) { ctx.Credentials.Add(new Credential { Name = "SecurityBadge", ValueType = false }); ctx.Credentials.Add(new Credential { Name = "Fingerprint", ValueType = false }); ctx.Credentials.Add(new Credential { Name = "KeyCode", ValueType = true }); ctx.Users.Add(new User { FirstName = "Stuard", LastName = "Kibry", DOB = new DateTime(1990, 09, 15), }); ctx.Users.Add(new User { FirstName = "Elijahu", LastName = "Sternbuch", DOB = new DateTime(1998, 10, 16), }); ctx.Users.Add(new User { FirstName = "Chananel", LastName = "Miller", DOB = new DateTime(1999, 05, 15), }); ctx.Users.Add(new User { FirstName = "Chaim", LastName = "Mozes", DOB = new DateTime(1998, 09, 05), }); ctx.Users.Add(new User { FirstName = "Harry", LastName = "Licht", DOB = new DateTime(1930, 09, 13), }); ctx.Users.Add(new User { FirstName = "Aron", LastName = "Katzauer", DOB = new DateTime(1998, 09, 15), }); ctx.Users.Add(new User { FirstName = "Nussi", LastName = "Ollech", DOB = new DateTime(1997, 07, 25), }); ctx.Doors.Add(new Door { Name = "MainDoor" }); ctx.Doors.Add(new Door { Name = "Safe" }); ctx.Doors.Add(new Door { Name = "Office" }); ctx.Doors.Add(new Door { Name = "EmergencyExit" }); ctx.SaveChanges(); int UserCount = ctx.Users.Count(); for (int i = 0; i < UserCount; i++) { ctx.UserCredentials.Add(new UserCredential { CredentialID = 1, UsersID = i + 1, Value = (i + 1).ToString() + (i + 1) + (i + 1) }); ctx.UserCredentials.Add(new UserCredential { CredentialID = 2, UsersID = i + 1, Value = (i + 1).ToString() + (i + 1) + (i + 1) + (i + 1) }); } ctx.SaveChanges(); int DoorCount = ctx.Doors.Count(); Random rnd = new Random(14); for (int i = 0; i < DoorCount; i++) { for (int j = 0; j < rnd.Next(1, 3); j++) { List <int> temp = new List <int>(); var DoorCredential = new DoorCredential { DoorID = i + 1 }; ctx.DoorCredentials.Add(DoorCredential); for (int x = 0; x < rnd.Next(1, 4); x++) { int now = rnd.Next(1, 4); while (temp.Contains(now)) { now = rnd.Next(1, 4); } temp.Add(now); foreach (var id in temp) { ctx.DoorCredentialsDetails.Add(new DoorCredentialDetail { DoorCredential = DoorCredential, CredentialID = id, Value = "111" }); } } } } ctx.SaveChanges(); for (int i = 0; i < 1000; i++) { ctx.AuthorizationAttempts.Add(new AuthorizationAttempt { DoorID = rnd.Next(1, DoorCount), UserID = rnd.Next(1, UserCount), Result = rnd.Next(0, 2) == 0 ? false : true, AttemptDate = new DateTime(2020, 05, 05, rnd.Next(24), rnd.Next(60), rnd.Next(60)) }); } ctx.SaveChanges(); base.Seed(ctx); }