I thought this had been answered, but I don't see the response. If the access token works for the user but not the "admin" or "teacher", then it is possible that you need to masquerade as the user by passing a query parameter of as_user_id.
This normally shows up in API calls that do not allow a user_id. In those cases, it defaults to the user making the API call.
The forbidden error can also happen in other cases. I've seen admin tokens that won't fetch information when teacher tokens will. It's because the admin doesn't have an enrollment in that class to fetch the information. If the token allows masquerading, then they can pretend to be the other user.
For the submissions request, it may be something completely different. If you do not specify student_ids[] in the query parameter, then you will get the unauthorized error. If you want the student submissions for all students, then you need to have a query parameter of student_ids[]=all.