Beispiel #1
0
        protected DocumentStoreBase(ngenDbContext dataContext, Employee currentEmployee)
        {
            DataContext     = dataContext;
            CurrentEmployee = currentEmployee;

            _createdDataContext = false;
        }
Beispiel #2
0
        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");
            }
        }
Beispiel #9
0
 public LocalDocumentStore(ngenDbContext dataContext, Employee currentEmployee)
     : base(dataContext, currentEmployee)
 {
 }