User specific content (posts) / limiting visibility

I think is hard to give you a full solution, mine is just a direction.

Install the free good and well known plugin Posts 2 Posts.

Using that plugin:

you can create many-to-many relationships between posts and users

So after you create a relation between students (as users) and posts (probably CPT) you need also

  • Create an archive page that shows only post connected to current user (look for pre_get_posts action)
  • Create single view that checks if current user is the one related to post and if not redirect or show something else (look for template_redirect action or template_include action)
  • Last thing you have to avoid logged user with specific role (students) can view backend, after login (and every time they try to view dashboard) they should be redirected to your customized archive (first item in this list). A search here in wpse will help you for this.

Try to implement step by step, and if you have problems ask a more specific question.