implement user apply and approve