public async Task <IActionResult> PermissionsDelete(PermisoUserDTO permisoUserDTO) { IActionResult result; User userRevoker; User userToRemove; Permiso permiso; UserPermiso userPermiso; List <string> permisosOk; string permisoLow; if (ContextoHttp.IsAuthenticated) { if (!Equals(permisoUserDTO, default)) { userRevoker = Context.GetUserPermiso(Models.User.GetEmailFromHttpContext(ContextoHttp)); if (userRevoker.IsAdmin) { userToRemove = Context.GetUserPermiso(permisoUserDTO.EmailUser); if (!Equals(userToRemove, default)) { if (userRevoker.Id.Equals(userToRemove.Id)) { result = Unauthorized();//no se puede quitar permisos a si mismo } else { permisosOk = new List <string>(); for (int i = 0; i < permisoUserDTO.Permisos.Length; i++) { permisoLow = permisoUserDTO.Permisos[i].ToLower(); permiso = await Context.Permisos.Where(p => p.Nombre.Equals(permisoLow)).FirstOrDefaultAsync(); if (!Equals(permiso, default)) { userPermiso = await Context.PermisosUsuarios.Where(p => p.PermisoId.Equals(permiso.Id) && p.UserId.Equals(userToRemove.Id)).FirstOrDefaultAsync(); if (!Equals(userPermiso, default)) { try { if (userPermiso.IsActive) { userPermiso.RevokedBy = userRevoker; userPermiso.RevokedDate = DateTime.UtcNow; Context.PermisosUsuarios.Update(userPermiso); await Context.SaveChangesAsync(); } permisosOk.Add(permisoUserDTO.Permisos[i]); } catch { } } } } result = Ok(permisosOk.Select(p => new PermisoDTO(p))); } } else { result = NotFound(); } } else { result = Unauthorized(); } } else { result = BadRequest(); } } else { result = this.NotLoggedIn(); } return(result); }
public async Task <IActionResult> PermissionsPut(PermisoUserDTO permisoUserDTO) { IActionResult result; User userGranter; User userToAdd; Permiso permiso; UserPermiso userPermiso; List <string> permisosOk; string permisoLow; if (ContextoHttp.IsAuthenticated) { if (!Equals(permisoUserDTO, default)) { userGranter = Context.GetUserPermiso(Models.User.GetEmailFromHttpContext(ContextoHttp)); if (userGranter.IsAdmin) { userToAdd = Context.GetUserPermiso(permisoUserDTO.EmailUser); if (!Equals(userToAdd, default)) { if (userGranter.Id.Equals(userToAdd.Id)) { result = Unauthorized();//no se puede dar permisos a si mismo } else if (userToAdd.IsValidated) { permisosOk = new List <string>(); for (int i = 0; i < permisoUserDTO.Permisos.Length; i++) { permisoLow = permisoUserDTO.Permisos[i].ToLower(); permiso = await Context.Permisos.Where(p => p.Nombre.Equals(permisoLow)).FirstOrDefaultAsync(); if (!Equals(permiso, default)) { try { userPermiso = await Context.PermisosUsuarios.Where(p => p.PermisoId.Equals(permiso.Id) && p.UserId.Equals(userToAdd.Id)).FirstOrDefaultAsync(); if (!Equals(userPermiso, default)) { if (!userPermiso.IsActive) {//asi si no es necesario no pierde quien y cuando se dio por última vez. userPermiso.GrantedBy = userGranter; userPermiso.GrantedDate = DateTime.UtcNow; Context.PermisosUsuarios.Update(userPermiso); } } else { Context.PermisosUsuarios.Add(new UserPermiso(userGranter, userToAdd, permiso)); } await Context.SaveChangesAsync(); permisosOk.Add(permisoUserDTO.Permisos[i]); } catch { } } } result = Ok(permisosOk.Select(p => new PermisoDTO(p))); } else { result = this.NotValidated(); } } else { result = NotFound(); } } else { result = Unauthorized(); } } else { result = BadRequest(); } } else { result = this.NotLoggedIn(); } return(result); }