public async Task <FileStorage> GetByChildId(int childId, int userId, int clientId) { var user = await _userManager.FindByIdAsync(userId.ToString()); var roleNames = await _userManager.GetRolesAsync(user); var roles = await _roleManager.Roles.Where(x => roleNames.Contains(x.Name)).ToListAsync(); var childFileStorage = await Context.Set <FileStorage>() .FirstOrDefaultAsync(x => x.Id == childId && x.IsActive && ((!x.ClientId.HasValue && !x.OwnerId.HasValue && roles.Any(y => y.RoleType == RoleType.SuperAdmin)) || (x.ClientId.HasValue && !x.OwnerId.HasValue && x.ClientId.Value == clientId && roles.Any(y => y.RoleType == RoleType.ClientAdmin)) || (!x.ClientId.HasValue && x.OwnerId.HasValue && x.OwnerId.Value == userId) || x.Permissions.Any(y => y.RecipientId == userId && !y.EndDate.HasValue))); var parentFileStorage = childFileStorage.ParentFileStorage; if (parentFileStorage != null && parentFileStorage.IsActive && ((parentFileStorage.Owner == null && parentFileStorage.Client == null && roles.Any(y => y.RoleType == RoleType.SuperAdmin)) || (parentFileStorage.Owner == null && parentFileStorage.Client != null && roles.Any(y => y.RoleType == RoleType.ClientAdmin) && parentFileStorage.ClientId == clientId) || (parentFileStorage.Owner != null && parentFileStorage.Client == null && (roles.Any(y => y.RoleType == RoleType.DepartmentHead) || roles.Any(y => y.RoleType == RoleType.Employee) || parentFileStorage.OwnerId == userId)) || parentFileStorage.Permissions.Any(y => y.RecipientId == userId && !y.EndDate.HasValue && y.Type == PermissionType.ReadAndWrite))) { return(parentFileStorage); } return(null); }
public async Task <(int?OwnerId, int?ClientId)> GetOwners(FileStorage parentFileStorage, int userId, int userClientId) { var user = await _userManager.FindByIdAsync(userId.ToString()); var roleNames = await _userManager.GetRolesAsync(user); var roles = await _roleManager.Roles.Where(x => roleNames.Contains(x.Name)).ToListAsync(); int?ownerId = null; int?clientId = null; if (parentFileStorage.Id == 1) { foreach (var role in roles) { if (role.RoleType == RoleType.SuperAdmin) { ownerId = null; clientId = null; } else if (role.RoleType == RoleType.ClientAdmin) { ownerId = null; clientId = userClientId; } else if (role.RoleType == RoleType.DepartmentHead || role.RoleType == RoleType.Employee) { ownerId = userId; clientId = null; } else { ownerId = userId; clientId = null; } } } else { ownerId = parentFileStorage.OwnerId; clientId = parentFileStorage.ClientId; } return(ownerId, clientId); }
public async Task <FileStorage> GetById(int id, int userId, int clientId) { if (id == 1) { return(await Context.Set <FileStorage>() .FirstOrDefaultAsync(x => x.Id == 1 && x.IsActive && ((!x.ClientId.HasValue && !x.OwnerId.HasValue) || (x.ClientId.HasValue && !x.OwnerId.HasValue && x.ClientId.Value == clientId) || (!x.ClientId.HasValue && x.OwnerId.HasValue && x.OwnerId.Value == userId)))); } var user = await _userManager.FindByIdAsync(userId.ToString()); var roleNames = await _userManager.GetRolesAsync(user); var roles = await _roleManager.Roles.Where(x => roleNames.Contains(x.Name)).ToListAsync(); return(await Context.Set <FileStorage>() .FirstOrDefaultAsync(x => x.Id == id && x.IsActive && ((!x.ClientId.HasValue && !x.OwnerId.HasValue && (roles.Any(y => y.RoleType == RoleType.SuperAdmin)) || x.ParentFileStorageId == 1) || (x.ClientId.HasValue && !x.OwnerId.HasValue && x.ClientId.Value == clientId && (roles.Any(y => y.RoleType == RoleType.ClientAdmin)) || x.ParentFileStorageId == 1) || (!x.ClientId.HasValue && x.OwnerId.HasValue && x.OwnerId.Value == userId) || x.Permissions.Any(y => y.RecipientId == userId && !y.EndDate.HasValue)))); }