I think your structure is perfectly fine. However, if there's going to be a significant difference in business logic between the domains (admin, student, teacher), it might be better to create namespaces at a higher level, allowing you to have a better distinction between the domains:
|- app/
|- Admin
|- Events
|- Http
|- ...
|- Teacher
|- Events
|- ...
|- Student
|- ...
I would however keep the models, routes and resources as they are in your example.
Also, something I like to do is create an additional Foundation (or Common) namespace under App. This is where I would put my shared logic or more common cross-domain stuff, like exception handling and generic middleware.