private dynamic AssignUserRole(int createdID, bool fromAdmin, params Enums[] roles) { try { var userRoles = context.AssignedRolesTable.Where(x => x.UserID == createdID).Select(x => x.RoleID).ToArray(); if (userRoles.Count() == 0) { foreach (var role in roles) { AssignedRolesModel assignedRoles = new AssignedRolesModel(); assignedRoles.RoleID = (int)role; assignedRoles.UserID = createdID; context.AssignedRolesTable.Add(assignedRoles); context.SaveChangesAsync(); } if (!fromAdmin) { return("userCreated"); } else { var assignedNewRole = context.AssignedRolesTable.Where(x => x.UserID == createdID).Select(x => x.RoleID).ToArray(); if (assignedNewRole.Contains((int)Enums.Admin) && assignedNewRole.Count() == 1) { AssignedRolesModel assignedRoles = new AssignedRolesModel(); assignedRoles.RoleID = (int)Enums.User; assignedRoles.UserID = createdID; context.AssignedRolesTable.Add(assignedRoles); context.SaveChangesAsync(); } var result = SendMail(createdID); if (result) { return("userCreated"); } else { return("noEmail"); } } } else { return("usetNotCreated"); } } catch (Exception e) { var result = new Result(); result.Status = Status.Error; result.Message = e.Message; result.StatusCode = HttpStatusCode.InternalServerError; return(StatusCode((int)result.StatusCode, result)); } }
public async Task <ActionResult <IResult> > ChangeUserRole(int id, bool add, string selectedRoles) { var result = new Result() { Operation = Operation.Update, Status = Status.Success }; try { var userObj = from login in context.Login where login.UserID == id select new UserViewModel { UserID = login.UserID, Username = login.Username, EmailID = login.EmailID, FirstName = login.FirstName, ImageContent = login.ImageContent, LastName = login.LastName, RoleID = null }; var user = await userObj.FirstOrDefaultAsync(); var userRoles = await context.AssignedRolesTable.Where(x => x.UserID == user.UserID).Select(x => x.RoleID).ToArrayAsync(); user.RoleID = userRoles; string[] tokens = selectedRoles.Split(','); int[] newRoles = Array.ConvertAll(tokens, int.Parse); if (newRoles.Count() == 0) { result.Status = Status.Fail; result.StatusCode = HttpStatusCode.BadRequest; result.Message = "noRoleSelected"; return(StatusCode((int)result.StatusCode, result)); } foreach (var role in newRoles) { if (!userRoles.Contains(role) && add) { AssignedRolesModel assignedRoles = new AssignedRolesModel(); assignedRoles.RoleID = role; assignedRoles.UserID = id; context.AssignedRolesTable.Add(assignedRoles); await context.SaveChangesAsync(); } else if (userRoles.Contains(role) && !add) { var unrequiredRole = await context.AssignedRolesTable.Where(x => x.UserID == id && x.RoleID == role).FirstOrDefaultAsync(); context.AssignedRolesTable.Remove(unrequiredRole); await context.SaveChangesAsync(); } } result.Status = Status.Success; result.StatusCode = HttpStatusCode.OK; result.Message = "newRolesAlloted"; return(StatusCode((int)result.StatusCode, result)); } catch (Exception e) { result.Status = Status.Error; result.Message = e.Message; result.StatusCode = HttpStatusCode.InternalServerError; return(StatusCode((int)result.StatusCode, result)); } }