Add recursive argument, add permission interface