public async Task <IActionResult> DeleteConfirmed(int id) { var layer = await _context.Layers.Include(m => m.LayerUsers).Include(m => m.LayerChangeLogs).ThenInclude(m => m.ChangeLog).ThenInclude(m => m.User).Where(m => m.LayerId == id).FirstOrDefaultAsync(); User me = UserHelper.GetCurrentUser(User, _context); // check if Layer is my userlayer or I am the Creator (first in changelog) or I am DM if (!User.IsInRole("DM")) { if (layer.LayerUsers.Where(m => m.UserId == me.UserId).Count() == 0) { ChangeLogLayer chll = layer.LayerChangeLogs.Take(1).FirstOrDefault(); if (chll?.ChangeLog.User.UserId != me.UserId) { return(RedirectToAction("NotAllowed", "Home")); } } } List <UserHasProjectLayer> upls = await _context.UsersHaveProjectLayers.Where(m => m.LayerId == layer.LayerId).ToListAsync(); foreach (UserHasProjectLayer upl in upls) { _context.UsersHaveProjectLayers.Remove(upl); } layer.LayerUsers = null; layer.LayerChangeLogs = null; _context.Layers.Remove(layer); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); }
public async Task <IActionResult> Edit(int id, [Bind("LayerId,Public,Title,Url,WMSLayer")] Layer layer) { if (id != layer.LayerId) { return(NotFound()); } var layerOld = await _context.Layers.Include(m => m.LayerUsers).Include(m => m.LayerChangeLogs).ThenInclude(m => m.ChangeLog).ThenInclude(m => m.User).Where(m => m.LayerId == id).FirstOrDefaultAsync(); User me = UserHelper.GetCurrentUser(User, _context); // check if Layer is my userlayer or I am the Creator (first in changelog) or I am DM if (!User.IsInRole("DM")) { if (layerOld.LayerUsers.Where(m => m.UserId == me.UserId).Count() == 0) { ChangeLogLayer chll = layer.LayerChangeLogs.Take(1).FirstOrDefault(); if (chll?.ChangeLog.User.UserId != me.UserId) { return(RedirectToAction("NotAllowed", "Home")); } } } if (ModelState.IsValid) { try { layerOld.Public = layer.Public; layerOld.Title = layer.Title; layerOld.Url = layer.Url; layerOld.WMSLayer = layer.WMSLayer; ChangeLog cl = new ChangeLog() { Log = "Changed Layer " + layer.Title, User = me }; ChangeLogLayer cll = new ChangeLogLayer() { ChangeLog = cl, Layer = layer }; layerOld.LayerChangeLogs.Add(cll); _context.Update(layerOld); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!LayerExists(layer.LayerId)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(layer)); }
// GET: Layers/Delete/5 public async Task <IActionResult> Delete(int?id) { if (id == null) { return(NotFound()); } var layer = await _context.Layers.Include(m => m.LayerUsers).Include(m => m.LayerChangeLogs).ThenInclude(m => m.ChangeLog).ThenInclude(m => m.User).Where(m => m.LayerId == id).FirstOrDefaultAsync(); User me = UserHelper.GetCurrentUser(User, _context); // check if Layer is my userlayer or I am the Creator (first in changelog) or I am DM if (!User.IsInRole("DM")) { if (layer.LayerUsers.Where(m => m.UserId == me.UserId).Count() == 0) { ChangeLogLayer chll = layer.LayerChangeLogs.Take(1).FirstOrDefault(); if (chll?.ChangeLog.User.UserId != me.UserId) { return(RedirectToAction("NotAllowed", "Home")); } } } if (layer == null) { return(NotFound()); } return(View(layer)); }
public async Task <IActionResult> Create([Bind("LayerId,Public,Title,Url,WMSLayer")] Layer layer) { if (ModelState.IsValid) { User me = UserHelper.GetCurrentUser(User, _context); ChangeLog cl = new ChangeLog() { Log = "New Layer " + layer.Title, User = me }; ChangeLogLayer cll = new ChangeLogLayer() { ChangeLog = cl, Layer = layer }; layer.LayerChangeLogs = new List <ChangeLogLayer>(); layer.LayerChangeLogs.Add(cll); if (!layer.Public) { UserLayer ul = new UserLayer() { User = me, Layer = layer }; layer.LayerUsers = new List <UserLayer>(); layer.LayerUsers.Add(ul); } _context.Add(layer); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } return(View(layer)); }
// GET: Layers public async Task <IActionResult> Index() { DB.Models.Domain.User me = UserHelper.GetCurrentUser(User, _context); List <Layer> alllayers = await _context.Layers.Include(m => m.LayerUsers).Include(m => m.LayerChangeLogs).ThenInclude(c => c.ChangeLog).ThenInclude(cl => cl.User).Where(m => m.Public == true).ToListAsync(); alllayers.AddRange(await _context.Layers.Include(m => m.LayerUsers).Include(m => m.LayerChangeLogs).ThenInclude(c => c.ChangeLog).ThenInclude(cl => cl.User).Where(m => m.LayerUsers.Any(u => u.UserId == me.UserId)).ToListAsync()); List <LayerViewModel> lvms = new List <LayerViewModel>(); foreach (Layer l in alllayers) { bool isEditable = true; if (!User.IsInRole("DM")) { if (l.LayerUsers == null) { isEditable = false; } else if (l.LayerUsers.Where(m => m.UserId == me.UserId).Count() == 0) { ChangeLogLayer chll = l.LayerChangeLogs.Take(1).FirstOrDefault(); if (chll?.ChangeLog.User.UserId != me.UserId) { isEditable = false; } } } LayerViewModel lvm = new LayerViewModel() { Layer = l, Editable = isEditable }; lvms.Add(lvm); } return(View(lvms)); }