Here are the actions for the given transformation on the computational basis states:
$$|000\rangle \rightarrow |000\rangle \qquad |001\rangle \rightarrow |010\rangle \qquad |010\rangle \rightarrow |011\rangle \qquad |011\rangle \rightarrow |100\rangle
\\
|100\rangle \rightarrow |101\rangle \qquad |101\rangle \rightarrow |110\rangle \qquad |110\rangle \rightarrow |111\rangle \qquad |111\rangle \rightarrow |001\rangle
$$
Let's label the qubits in this format: $|q_2 q_1 q_0 \rangle$ (Qiskit's labeling). Here are some ideas. $|001\rangle \rightarrow |010\rangle$ and $ |010\rangle \rightarrow |011\rangle$ transformations can be done with CNOT(0, 1)
and CNOT(1, 0)
gates. $|011\rangle \rightarrow |100\rangle$ transformation can be done by adding Toffali(0, 1, 2)
before the two CNOTs presented above and adding CNOT(2, 0)
after the two CNOTs. $|110\rangle \rightarrow |111\rangle$ transformation can be done with Toffali(2, 1, 0)
. With this ideas we can construct the circuit (the ordering is important, but can be changed in some places):

For checking the correctness of the circuit we can try to give different inputs to the circuit and check the outputs or we can do matrix multiplications and see if the final matrix will be equal to the given matrix or we can use tools from Qiskit:
from qiskit import *
import qiskit.quantum_info as qi
circuit = QuantumCircuit(3)
circuit.ccx(0, 1, 2)
circuit.cx(0, 1)
circuit.cx(1, 0)
circuit.cx(2, 0)
circuit.ccx(2, 1, 0)
matrix = qi.Operator(circuit)
print(matrix.data)
The output:
[[1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 1]
[0 1 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0]
[0 0 0 1 0 0 0 0]
[0 0 0 0 1 0 0 0]
[0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 1 0]]