feat: enabled per student access
diff --git a/erpnext/www/lms/content.py b/erpnext/www/lms/content.py
index 78b02e2..67e3508 100644
--- a/erpnext/www/lms/content.py
+++ b/erpnext/www/lms/content.py
@@ -5,19 +5,27 @@
 no_cache = 1
 
 def get_context(context):
-	if frappe.session.user == "Guest":
+	program = frappe.form_dict['program']
+	content = frappe.form_dict['content']
+	content_type = frappe.form_dict['type']
+
+	has_program_access = utils.allowed_program_access(program)
+	has_content_access = allowed_content_access(program, content, content_type)
+
+	if frappe.session.user == "Guest" or not has_program_access or not has_content_access:
 		frappe.local.flags.redirect_location = '/lms'
 		raise frappe.Redirect
 
+	context.content = frappe.get_doc(content_type, content).as_dict()
+	context.content_type = content_type
+
 	context.course = frappe.form_dict['course']
 	context.topic = frappe.form_dict['topic']
-	content = frappe.form_dict['content']
-	context.content_type = frappe.form_dict['type']
 
-	context.content = frappe.get_doc(context.content_type, content).as_dict()
 	context.previous = get_previous_content(context.topic, context.course, context.content, context.content_type)
 	context.next = get_next_content(context.topic, context.course, context.content, context.content_type)
 
+
 def get_next_content(topic, course, content, content_type):
 	if frappe.session.user == "Guest":
 		return None
@@ -38,4 +46,22 @@
 	if current_index == 0:
 		return None
 	else:
-		return content_list[current_index - 1]
\ No newline at end of file
+		return content_list[current_index - 1]
+
+def allowed_content_access(program, content, content_type):
+	# Get all content in program
+
+	# Using ORM
+	# course_in_program = [course.course for course in frappe.get_all('Program Course', fields=['course'], filters={'parent': program})]
+	# topics_in_course = [topic.topic for topic in frappe.get_all("Course Topic", fields=['topic'], filters=[['parent','in', course_in_program]])]
+	# contents_of_program = [[c.content, c.content_type] for c in frappe.get_all('Topic Content', fields=['content', 'content_type'], filters=[['parent','in', topics_in_course]])]
+
+	contents_of_program = frappe.db.sql("""select `tabtopic content`.content, `tabtopic content`.content_type
+	from `tabcourse topic`,
+		 `tabprogram course`,
+		 `tabtopic content`
+	where `tabcourse topic`.parent = `tabprogram course`.course
+			and `tabtopic content`.parent = `tabcourse topic`.topic
+			and `tabprogram course`.parent = '{0}'""".format(program))
+
+	return (content, content_type) in contents_of_program
\ No newline at end of file
diff --git a/erpnext/www/lms/course.py b/erpnext/www/lms/course.py
index d8670e6..b9aff5c 100644
--- a/erpnext/www/lms/course.py
+++ b/erpnext/www/lms/course.py
@@ -7,5 +7,7 @@
 def get_context(context):
 	context.education_settings = frappe.get_single("Education Settings")
 	course = frappe.get_doc('Course', frappe.form_dict['name'])
+	context.program = frappe.form_dict['program']
 	context.course = course
-	context.topics = course.get_topics()
\ No newline at end of file
+	context.topics = course.get_topics()
+	context.has_access =  utils.allowed_program_access(context.program)
\ No newline at end of file
diff --git a/erpnext/www/lms/program.py b/erpnext/www/lms/program.py
index 827b11a..4c3a3fd 100644
--- a/erpnext/www/lms/program.py
+++ b/erpnext/www/lms/program.py
@@ -6,8 +6,8 @@
 
 def get_context(context):
 	context.education_settings = frappe.get_single("Education Settings")
-	context.program = get_program(frappe.form_dict['name'])
-	context.is_enrolled = utils.get_enrollment_status(program)
+	context.program = get_program(frappe.form_dict['program'])
+	context.has_access = utils.allowed_program_access(frappe.form_dict['program'])
 
 def get_program(program_name):
 	try: