protected DocumentStoreBase(ngenDbContext dataContext, Employee currentEmployee) { DataContext = dataContext; CurrentEmployee = currentEmployee; _createdDataContext = false; }
protected DocumentStoreBase(Employee currentEmployee) { DataContext = new ngenDbContext(); CurrentEmployee = currentEmployee; _createdDataContext = true; }
private static async Task EnforceAccessRightAsync(int documentId, Employee employee, AccessRight right) { using (var context = new ngenDbContext()) { var document = await context.Documents.FirstAsync(d => d.Id == documentId); var permissions = document.Permissions == null ? null : DocumentPermissions.FromBytes(document.Permissions); if (permissions == null) { return; } switch (right) { case AccessRight.Read: if (!permissions.CanRead(employee)) { throw new DocumentAccessException("You do not have read access for this document", document, employee); } break; case AccessRight.ReadWrite: if (!permissions.CanWrite(employee)) { throw new DocumentAccessException("You do not have write access to this document", document, employee); } break; } } }
private static void Main(string[] args) { try { Console.CursorVisible = false; SecureSettings.FileShareDirectory = @"\\YOGA2PRO\ngen_store"; SecureSettings.CheckOutDirectory = @"C:\Users\ajtun\Documents\ngen\Checked Out"; SecureSettings.EncryptionPassword = "******"; CreateAdminAccount(); CreateGuestAccount(); CreateTestPart(); using (var db = new ngenDbContext()) { var employee = db.Employees.Single(e => e.UserName == "guest"); var store = new LocalDocumentStore(db, employee); store.TransferProgress += Store_TransferProgress; //var part = db.Parts.Single(p => p.DrawingNumber == "ABC123"); //var task = store.AddAsync(@"C:\Users\ajtun\Documents\nans_step.png", part); //var ver = db.DocumentVersions.First(); //var task = store.OpenTempAsync(ver); var doc = db.Documents.First(); var task = store.CheckOutAsync(doc); Task.WaitAll(task); } } catch (AggregateException aggEx) { var securityExceptions = aggEx.InnerExceptions.Where(x => x is SystemPermissionException).ToList(); if (!securityExceptions.Any()) { Console.WriteLine("Something weird just happened!"); } else { foreach (var ex in securityExceptions) { Console.WriteLine(ex.Message); break; } } } Console.WriteLine(); Console.WriteLine("--------------------------------------------------"); Console.WriteLine("Finished. Press enter to exit"); Console.ReadLine(); }
/// <summary> /// Checks if the employee has the specified permission and throws a <see cref="SystemPermissionException"/> if they do not /// </summary> /// <param name="permission">The permission to check for</param> /// <param name="employee">The employee to check</param> /// <exception cref="SystemPermissionException">Throws exception if employee doesn't have the specified permission</exception> /// <returns></returns> public static async Task EnforceAsync(SystemPermission permission, Employee employee) { using (var context = new ngenDbContext()) { var role = await context.SystemRoles.FirstAsync(r => r.Id == employee.SystemRoleId); var perms = SystemRolePermissions.FromBytes(role.Permissions); if (!perms.Has(permission)) { throw new SystemPermissionException("You do not have permission to do this!", employee, permission); } } }
private static void CreateAdminAccount() { using (var db = new ngenDbContext()) { var emp = db.Employees.SingleOrDefault(e => e.UserName == "mr_robot"); if (emp != null) { return; } var role = new SystemRole { Name = "BUILTIN_ADMIN", Description = "Built in administrator account. Has complete control of the entire system!" }; var perms = new SystemRolePermissions(); perms.Grant(SystemPermission.Administrator); role.Permissions = perms.ToBytes(); var person = new Person { FirstName = "System", LastName = "Administrator", DateOfBirth = DateTime.Today }; var employee = new Employee { UserName = "******", Password = new BCryptPasswordProvider().HashPassword("correcthorsebatterystaple"), IsActive = true, SystemRole = role, Person = person }; db.SystemRoles.Add(role); db.People.Add(person); db.Employees.Add(employee); db.SaveChanges(); Console.WriteLine(); Console.WriteLine("Admin account created"); } }
private static void CreateGuestAccount() { using (var db = new ngenDbContext()) { var emp = db.Employees.SingleOrDefault(e => e.UserName == "guest"); if (emp != null) { return; } var role = new SystemRole { Name = "GUESTS", Description = "Built in guest account for test purposes. Has no permission to do anything at all!" }; var perms = new SystemRolePermissions(); role.Permissions = perms.ToBytes(); var person = new Person { FirstName = "Guest", LastName = "Account", DateOfBirth = DateTime.Today }; var employee = new Employee { UserName = "******", Password = new BCryptPasswordProvider().HashPassword("password"), IsActive = true, SystemRole = role, Person = person }; db.SystemRoles.Add(role); db.People.Add(person); db.Employees.Add(employee); db.SaveChanges(); Console.WriteLine(); Console.WriteLine("Guest account created"); } }
private static void CreateTestPart() { using (var db = new ngenDbContext()) { var part = db.Parts.SingleOrDefault(p => p.DrawingNumber == "ABC123"); if (part != null) { return; } var customer = new Customer { FullName = "Test Customer Limited", ShortName = "Test Customer" }; part = new Part { Customer = customer, DrawingNumber = "ABC123", Name = "Test Part" }; var version = new PartVersion { VersionNumber = "01", Changes = "N/A", Part = part }; db.Customers.Add(customer); db.Parts.Add(part); db.PartVersions.Add(version); db.SaveChanges(); Console.WriteLine(); Console.WriteLine("Test part record created"); } }
public LocalDocumentStore(ngenDbContext dataContext, Employee currentEmployee) : base(dataContext, currentEmployee) { }