Пример #1
0
        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)));
        }
Пример #2
0
        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));
        }
Пример #3
0
        // 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));
        }
Пример #4
0
        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));
        }
Пример #5
0
        // 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));
        }