public async Task <GetRoleResponse> GetRole(GetRoleRequest request) { var response = new GetRoleResponse(); var roles = await _cache.Roles(); var permissions = await _cache.Permissions(); var rolePermissions = await _cache.RolePermissions(); var role = roles.FirstOrDefault(r => r.Id == request.RoleId); if (role == null) { response.Notifications.AddError($"Could not find role with Id {request.RoleId}"); return(response); } var rolesPermissions = rolePermissions.Where(rc => rc.Role_Id == request.RoleId).Select(rc => rc.Permission_Id); response.Role = role; response.Permissions = permissions.Where(c => rolesPermissions.Contains(c.Id)).ToList(); response.Role = role; return(response); }
public async Task <GetSessionResponse> GetSession() { var response = new GetSessionResponse(); // get or create a new session var session = await _sessionProvider.Get <SessionEntity>(SessionConstants.SessionEntity); if (session == null) { // flush any authenticated cookies in the event the application restarts await _httpContextAccessor.HttpContext.SignOutAsync(); await _sessionProvider.Remove(SessionConstants.User); using (var uow = _uowFactory.GetUnitOfWork()) { session = await uow.SessionRepo.CreateSession(new Infrastructure.Repositories.SessionRepo.Models.CreateSessionRequest() { Created_By = ApplicationConstants.SystemUserId }); uow.Commit(); await _sessionProvider.Set(SessionConstants.SessionEntity, session); } } response.Id = session.Id; response.SessionLogId = await _sessionProvider.Get <int>(SessionConstants.SessionLogId); // get or hydrate user from session var user = await _sessionProvider.Get <User>(SessionConstants.User); if (user == null && session.User_Id.HasValue) { using (var uow = _uowFactory.GetUnitOfWork()) { user = new User(); user.Entity = await uow.UserRepo.GetUserById(new Infrastructure.Repositories.UserRepo.Models.GetUserByIdRequest() { Id = session.User_Id.Value }); uow.Commit(); var usersRoles = await _cache.UserRoles(); var userRoleIds = usersRoles.Where(ur => ur.User_Id == user.Entity.Id).Select(ur => ur.Role_Id); var rolePermissions = await _cache.RolePermissions(); var userRolePermissionIds = rolePermissions.Where(rc => userRoleIds.Contains(rc.Role_Id)).Select(rc => rc.Permission_Id); var permissionsLookup = await _cache.Permissions(); var userPermissionsData = permissionsLookup.Where(c => userRolePermissionIds.Contains(c.Id)); var rolesLookup = await _cache.Roles(); var userRolesData = rolesLookup.Where(r => userRoleIds.Contains(r.Id)); foreach (var userPermission in userPermissionsData) { user.PermissionKeys.Add(userPermission.Key); } foreach (var userRole in userRolesData) { user.RoleIds.Add(userRole.Id); } await _sessionProvider.Set(SessionConstants.User, user); } } response.User = user; return(response); }