public GXActionDeleteResponse Post(GXActionDeleteRequest request) { IAuthSession s = this.GetSession(false); int id = Convert.ToInt32(s.Id); List<GXEventsItem> events = new List<GXEventsItem>(); lock (Db) { if (id == 0) { throw new ArgumentException("Remove failed. Invalid session ID."); } if (!GuruxAMI.Server.GXBasicAuthProvider.CanUserEdit(s)) { throw new ArgumentException("Remove not allowed."); } List<GXAmiUserActionLog> logs = new List<GXAmiUserActionLog>(); bool superAdmin = GuruxAMI.Server.GXBasicAuthProvider.IsSuperAdmin(s); //Remove user group logs. if (request.UserGroupIDs != null) { foreach (long it in request.UserGroupIDs) { if (it == 0) { throw new ArgumentException("ID is required"); } if (!superAdmin && !GXUserGroupService.CanAccess(Db, id, it)) { throw new ArgumentException("Access denied."); } logs.AddRange(Db.Select<GXAmiUserActionLog>(p => p.UserID == it)); } } //Remove user logs. if (request.UserIDs != null) { foreach (long it in request.UserIDs) { if (it == 0) { throw new ArgumentException("ID is required"); } if (!superAdmin || id != it) { throw new ArgumentException("Access denied."); } logs.AddRange(Db.Select<GXAmiUserActionLog>(p => p.UserID == it)); } } //Remove Device logs. if (request.DeviceIDs != null) { foreach (ulong it in request.DeviceIDs) { if (it == 0) { throw new ArgumentException("ID is required"); } logs.AddRange(Db.Select<GXAmiUserActionLog>(p => p.TargetID == it)); } } //Remove Device group logs. if (request.DeviceGroupIDs != null) { foreach (ulong it in request.DeviceGroupIDs) { if (it == 0) { throw new ArgumentException("ID is required"); } logs.AddRange(Db.Select<GXAmiUserActionLog>(p => p.TargetID == it)); } } if (logs.Count == 0) { //Remove all log items. if (superAdmin) { logs.AddRange(Db.Select<GXAmiUserActionLog>()); } else //Remove all log items made by user. { logs.AddRange(Db.Select<GXAmiUserActionLog>(p => p.UserID == id)); } } foreach (GXAmiUserActionLog it in logs) { events.Add(new GXEventsItem(ActionTargets.DeviceError, Actions.Remove, it)); } Db.DeleteByIds<GXAmiUserActionLog>(logs); } AppHost host = this.ResolveService<AppHost>(); host.SetEvents(Db, this.Request, id, events); return new GXActionDeleteResponse(); }
public GXActionDeleteResponse Post(GXActionDeleteRequest request) { IAuthSession s = this.GetSession(false); int id = Convert.ToInt32(s.Id); List <GXEventsItem> events = new List <GXEventsItem>(); lock (Db) { if (id == 0) { throw new ArgumentException("Remove failed. Invalid session ID."); } if (!GuruxAMI.Server.GXBasicAuthProvider.CanUserEdit(s)) { throw new ArgumentException("Remove not allowed."); } List <GXAmiUserActionLog> logs = new List <GXAmiUserActionLog>(); bool superAdmin = GuruxAMI.Server.GXBasicAuthProvider.IsSuperAdmin(s); //Remove user group logs. if (request.UserGroupIDs != null) { foreach (long it in request.UserGroupIDs) { if (it == 0) { throw new ArgumentException("ID is required"); } if (!superAdmin && !GXUserGroupService.CanAccess(Db, id, it)) { throw new ArgumentException("Access denied."); } logs.AddRange(Db.Select <GXAmiUserActionLog>(p => p.UserID == it)); } } //Remove user logs. if (request.UserIDs != null) { foreach (long it in request.UserIDs) { if (it == 0) { throw new ArgumentException("ID is required"); } if (!superAdmin || id != it) { throw new ArgumentException("Access denied."); } logs.AddRange(Db.Select <GXAmiUserActionLog>(p => p.UserID == it)); } } //Remove Device logs. if (request.DeviceIDs != null) { foreach (ulong it in request.DeviceIDs) { if (it == 0) { throw new ArgumentException("ID is required"); } logs.AddRange(Db.Select <GXAmiUserActionLog>(p => p.TargetID == it)); } } //Remove Device group logs. if (request.DeviceGroupIDs != null) { foreach (ulong it in request.DeviceGroupIDs) { if (it == 0) { throw new ArgumentException("ID is required"); } logs.AddRange(Db.Select <GXAmiUserActionLog>(p => p.TargetID == it)); } } if (logs.Count == 0) { //Remove all log items. if (superAdmin) { logs.AddRange(Db.Select <GXAmiUserActionLog>()); } else //Remove all log items made by user. { logs.AddRange(Db.Select <GXAmiUserActionLog>(p => p.UserID == id)); } } foreach (GXAmiUserActionLog it in logs) { events.Add(new GXEventsItem(ActionTargets.DeviceError, Actions.Remove, it)); } Db.DeleteByIds <GXAmiUserActionLog>(logs); } AppHost host = this.ResolveService <AppHost>(); host.SetEvents(Db, this.Request, id, events); return(new GXActionDeleteResponse()); }