Пример #1
0
        public async Task <GetUserResponse> GetUser(GetUserRequest request)
        {
            var response = new GetUserResponse();

            var userRoles = await _cache.UserRoles();

            var roles = await _cache.Roles();

            var permissions = await _cache.Permissions();

            using (var uow = _uowFactory.GetUnitOfWork())
            {
                var user = await uow.UserRepo.GetUserById(new Infrastructure.Repositories.UserRepo.Models.GetUserByIdRequest()
                {
                    Id = request.UserId
                });

                uow.Commit();

                var usersRoles = userRoles.Where(ur => ur.User_Id == request.UserId).Select(ur => ur.Role_Id);

                response.Roles = roles.Where(r => usersRoles.Contains(r.Id)).ToList();

                if (user == null)
                {
                    response.Notifications.AddError($"Could not find user with Id {request.UserId}");
                    return(response);
                }
                response.User = user;
                return(response);
            }
        }
        public async Task <GetProfileResponse> GetProfile()
        {
            var session = await _sessionService.GetAuthenticatedSession();

            var user  = session.User;
            var roles = await _cache.Roles();

            var userRoles = await _cache.UserRoles();

            var usersRoles = userRoles.Where(ur => ur.User_Id == session.User.Entity.Id).Select(ur => ur.Role_Id);

            return(new GetProfileResponse()
            {
                EmailAddress = user.Entity.Email_Address,
                FirstName = user.Entity.First_Name,
                LastName = user.Entity.Last_Name,
                MobileNumber = user.Entity.Mobile_Number,
                Username = user.Entity.Username,
                Roles = roles.Where(r => usersRoles.Contains(r.Id)).ToList()
            });
        }
        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);
        }