Although I will be using Ruby on Rails, this is a general questions about the best way to model a database and design a custom access control system for a CMS. So it does not matter what language/db. I would be happy to hear input from all experts.
My problem: I am in the early process of developing an online tutorial system for a local university. The idea is that students will be able to obtain extra help online alongside their main class material.
Basics: - Planning to use an existing CMS to manage content (basically web pages).
Content is structured by course, topic, subtopic, etc.
A registered student can login and see relevant content (so only see course material that they signed up for).
As student follows content he/she is required to do some exercises.
There are tutors that check student progress and provide further assistance if needed. So exercise results are stored alongside student records for tutors to review.
Student responses to exercises are not graded, but answers are provided upon submission.
Major issue: some profs wish to coerce students to do the exercises before the rest of content becomes available. Other profs wish to set times when content chunks get released. Or it could be a combination of both.
The timed content release is easy to do. But I have no idea how to model and design the conditional content release. In this case conditions being the student progress (completed exercises).
To illustrate, I have this content:
1. Calculus
- 1.1 Limits
- 1.1.1 Basic principles
- 1.1.2 More basics (with exercise)
- 1.1.3 Answers to previous questions
- 1.2 Derivatives
- 1.2.1 Intro
- 1.2.2 Sample problems(with exercises)
- 1.2.3 Answers
- 1.2.3 More content ....
- 1.9 More calculus
- 1.9.3 Some other content that is available when all previous exercises are completed
2. Physics
3. Chem
Example: Content for Calculus should only be available once student is enrolled in Calculus class. Content for 1.1.3, 1.2, etc should only become available once exercises on 1.1.2 are completed. So it's kind of a chained reaction.
So as you can see there is some structure, but mostly a lot of dependencies. So I'm wondering what would be appropriate way to model this in the database, and how does one design access control for such a system.
Has any one encountered a similar problem? Any ideas, insight, references would be most welcome.
A huge thank you.