private List <string> GetExtraRoles(Models.Entities.Views.RosterMeta4 user) { List <string> result = new List <string>(); Dictionary <string, List <string> > secNamesMaping = dBContext.UserGroupsOrNames .Where(w => w.UserGroup == null) .Include(i => i.UserPermissions).ThenInclude(ti => ti.Role) .ToDictionary(k => k.UserName.ToLower(), v => v.UserPermissions.Select(x => x.Role.Name).ToList()); foreach (KeyValuePair <string, List <string> > secName in secNamesMaping) { if (secName.Key == user.NetworkLogin) { result = result.Concat(secName.Value).ToList(); } } return(result.Distinct().ToList()); }
public ObjectResult DevLogin([FromBody] SMUserCredentials data) { SMGenericResponse response = new SMGenericResponse() { Status = "Success", Message = "Credentials Correct" }; try { SMUserCredentials credentials = data.CleanData(); MCredentialsCheckResultClass result = SearchUserInfoLDAP(credentials); if (result.Result == null) { response.Status = "Error"; response.Message = result.Message; response.Data = null; return(BuildResponseObjectResult(response, (int)HttpStatusCode.InternalServerError)); } List <string> roles = (List <string>)result.Result; if (roles.Count <= 0) { response.Status = "Error"; response.Message = "The user has no valid access roles to this application"; response.Data = null; return(BuildResponseObjectResult(response, (int)HttpStatusCode.Unauthorized)); } Models.Entities.Views.RosterMeta4 rosterMeta4 = dBContext.RosterMeta4.Include(i => i.User).First(f => f.NetworkLogin == credentials.Username); if (!rosterMeta4.Status) { response.Status = "Error"; response.Message = "The user has no access permission due inactivity"; response.Data = null; return(BuildResponseObjectResult(response, (int)HttpStatusCode.Forbidden)); } MUserTokenClaimsClass userTokenClaims = null; try { if (rosterMeta4.User == null) { rosterMeta4.User = new Users() { EmployeeNumber = rosterMeta4.EmployeeNumber, DateFirstLogin = DateTime.Now, DateLastLogin = DateTime.Now }; } else { rosterMeta4.User.DateLastLogin = DateTime.Now; } dBContext.SaveChanges(); roles.AddRange(GetExtraRoles(rosterMeta4)); userTokenClaims = new MUserTokenClaimsClass() { FullName = rosterMeta4.FullName, NetworkLogin = rosterMeta4.NetworkLogin, UserID = rosterMeta4.User.ID, EmployeeNumber = rosterMeta4.EmployeeNumber, EmployeeNumberSup = rosterMeta4.EmployeeNumberSup, ClientIP = Request.HttpContext.Connection.RemoteIpAddress.ToString(), Roles = roles.Distinct().ToList(), TokenV = 1.0 }; } catch (Exception ee) { response.Status = "Error"; response.Message = "Error fetching App/User extra info from requests"; response.Data = ee.ToString(); return(BuildResponseObjectResult(response, (int)HttpStatusCode.InternalServerError)); } response.Data = GetJWTToken(userTokenClaims); } catch (Exception e) { response.SetErrorInfo(e); } return(BuildResponseObjectResult(response)); }