public override ObjectAccessItem InitializeAccessItem(ObjectAccessItem accessItem, int userID, Type objectType) { var access = base.InitializeAccessItem(accessItem, userID, objectType); var owner = access.Users.FirstOrDefault(x => x.UserID == userID); access.ReadAll = access.UpdateAll = access.DeleteAll = access.ChangeAccessAll = false; access.UserCategories.Clear(); access.Users.Clear(); access.Users.Add(owner); return accessItem; }
public override ObjectAccessItem InitializeAccessItem(ObjectAccessItem accessItem, int userID, Type objectType) { var access = base.InitializeAccessItem(accessItem, userID, objectType); access.DeleteAll = access.UpdateAll = access.ChangeAccessAll = false; access.UserCategories = access.UserCategories ?? new List<UserCategoryAccess>(); foreach (var category in access.UserCategories) category.Update = category.Delete = category.ChangeAccess = false; access.Users = access.Users ?? new List<UserAccess>(); foreach (var user in access.Users.Where(x => x.UserID != userID)) user.Update = user.Delete = user.ChangeAccess = false; return access; }
public override ObjectAccessItem InitializeAccessItem(ObjectAccessItem accessItem, int userID, Type objectType) { var user = _systemUnitOfWork.GetRepository<User>().All().FirstOrDefault(x => !x.Hidden && x.ID == userID); if (user != null && user.UserCategory != null) { var nearestCompanies = new List<UserCategory>(); if (user.UserCategory.Company) nearestCompanies.Add(user.UserCategory); if (user.UserCategory.sys_all_parents != null) { var parentIDs = user.UserCategory.sys_all_parents.Split(HCategory.Seperator) .Select(HCategory.IdToInt).Reverse(); nearestCompanies.AddRange(_systemUnitOfWork.GetRepository<UserCategory>().All() .Where(x => !x.Hidden && parentIDs.Contains(x.ID) && x.Company)); } if (nearestCompanies.Any()) accessItem.ReadAll = accessItem.UpdateAll = accessItem.DeleteAll = accessItem.ChangeAccessAll = false; accessItem.UserCategories = nearestCompanies.Select(x => new UserCategoryAccess { UserCategoryID = x.ID, ObjectAccessItem = accessItem, ChangeAccess = false }).ToList(); accessItem.Users.Add(new UserAccess { UserID = user.ID }); } return accessItem; }
public virtual void OnBeforeSave(IUnitOfWork unitOfWork, ObjectAccessItem src, ObjectAccessItem dest) { if (src.UserCategories != null) { src.UserCategories = src.UserCategories.GroupBy(x => x.UserCategoryID).Select(x => { var category = x.FirstOrDefault(c => c.UserCategoryID == x.Key); if (category == null) return null; category.Read = x.Any(c => c.Read); category.Update = x.Any(c => c.Update); category.Delete = x.Any(c => c.Delete); return category; }).ToList(); } if (src.Users != null) { src.Users = src.Users.GroupBy(x => x.UserID).Select(x => { var category = x.FirstOrDefault(c => c.UserID == x.Key); if (category == null) return null; category.Read = x.Any(c => c.Read); category.Update = x.Any(c => c.Update); category.Delete = x.Any(c => c.Delete); return category; }).ToList(); } }
public virtual ObjectAccessItem InitializeAccessItem(ObjectAccessItem accessItem, int userID, Type objectType) { return accessItem; }
public virtual void ChangeSortOrder(IUnitOfWork unitOfWork, ObjectAccessItem obj, int newOrder) { }
public virtual void Delete(IUnitOfWork unitOfWork, ObjectAccessItem obj) { var repository = unitOfWork.GetRepository<ObjectAccessItem>(); obj.Hidden = true; repository.Update(obj); unitOfWork.SaveChanges(); var eventHandler = Volatile.Read(ref this.OnDelete); if (eventHandler != null) { eventHandler(this, new BaseObjectEventArgs() { Type = TypeEvent.OnDelete, Object = obj, UnitOfWork = unitOfWork }); } }
public virtual ObjectAccessItem Update(IUnitOfWork unitOfWork, ObjectAccessItem obj) { var repository = unitOfWork.GetRepository<ObjectAccessItem>(); var objDest = repository.Find(obj.ID); this.OnBeforeSave(unitOfWork, obj, objDest); var saver = this.GetForSave(unitOfWork, unitOfWork.GetObjectSaver(obj, objDest)); repository.Update(saver.Dest); unitOfWork.SaveChanges(); var eventHandler = Volatile.Read(ref this.OnUpdate); if (eventHandler != null) { eventHandler(this, new BaseObjectEventArgs() { Type = TypeEvent.OnUpdate, Object = saver.Dest, UnitOfWork = unitOfWork }); } return saver.Dest; }
public virtual ObjectAccessItem Create(IUnitOfWork unitOfWork, ObjectAccessItem obj) { this.InitSortOrder(unitOfWork, obj); this.OnBeforeSave(unitOfWork, obj, null); var saver = this.GetForSave(unitOfWork, unitOfWork.GetObjectSaver(obj, null)); unitOfWork.GetRepository<ObjectAccessItem>().Create(saver.Dest); unitOfWork.SaveChanges(); var eventHandler = Volatile.Read(ref this.OnCreate); if (eventHandler != null) { eventHandler(this, new BaseObjectEventArgs() { Type = TypeEvent.OnCreate, Object = saver.Dest, UnitOfWork = unitOfWork }); } return saver.Dest; }
protected virtual void InitSortOrder(IUnitOfWork unitOfWork, ObjectAccessItem obj) { if (obj.SortOrder == -1) { obj.SortOrder = (this.GetAll(unitOfWork).Max(m => (int?)m.SortOrder) ?? 0) + 1; } }