# ক্লাস শিক্ষক অ্যাক্সেস কন্ট্রোল সিস্টেম

## সিস্টেমের বিবরণ

এই সিস্টেমটি নিশ্চিত করে যে ক্লাস শিক্ষকরা শুধুমাত্র তাদের নির্ধারিত ক্লাসের তথ্য দেখতে এবং পরিচালনা করতে পারবেন। অন্য কোন ক্লাসের তথ্য বা কার্যক্রমে তাদের অ্যাক্সেস থাকবে না।

## মূল বৈশিষ্ট্যসমূহ

### 1. অ্যাক্সেস কন্ট্রোল ফাংশন
`includes/access_control.php` ফাইলে নিম্নলিখিত হেলপার ফাংশন যোগ করা হয়েছে:

- `get_teacher_assigned_classes($teacher_id)` - শিক্ষকের নির্ধারিত ক্লাসের ID গুলো রিটার্ন করে
- `get_teacher_assigned_subjects($teacher_id, $class_ids)` - শিক্ষকের নির্ধারিত বিষয় গুলো রিটার্ন করে
- `teacher_has_class_access($teacher_id, $class_id)` - শিক্ষকের ক্লাস অ্যাক্সেস যাচাই করে
- `teacher_has_subject_access($teacher_id, $subject_id, $class_id)` - শিক্ষকের বিষয় অ্যাক্সেস যাচাই করে
- `teacher_has_student_access($teacher_id, $student_id)` - শিক্ষকের ছাত্র অ্যাক্সেস যাচাই করে
- `validate_teacher_class_subject_access($teacher_id, $class_id, $subject_id)` - ক্লাস এবং বিষয় অ্যাক্সেস একসাথে যাচাই করে

### 2. ডাটাবেস স্ট্রাকচার
- `class_teachers` টেবিলে শিক্ষক এবং ক্লাসের ম্যাপিং সংরক্ষিত থাকে
- `assignment_type` কলামে শিক্ষকের ভূমিকা (primary, assistant, subject) নির্ধারণ করা হয়
- `status` কলামে অ্যাসাইনমেন্টের স্ট্যাটাস (active/inactive) থাকে

### 3. অ্যাক্সেস কন্ট্রোল প্রয়োগকৃত পেজসমূহ

#### ড্যাশবোর্ড (`teachers/dashboard.php`)
- শুধুমাত্র নির্ধারিত ক্লাসের স্ট্যাটিসটিক্স দেখায়
- অনির্ধারিত ক্লাসের তথ্য লুকিয়ে রাখে

#### ছাত্র তালিকা (`teachers/my_students.php`)
- শুধুমাত্র নির্ধারিত ক্লাসের ছাত্রদের দেখায়
- অন্য ক্লাসের ছাত্রদের এডিট/ডিলিট করতে দেয় না
- ক্লাস ফিল্টারে শুধু নির্ধারিত ক্লাসগুলো দেখায়

#### মার্কস এন্ট্রি (`teachers/marks_entry.php`)
- শুধুমাত্র নির্ধারিত ক্লাস এবং বিষয়ের জন্য মার্কস এন্ট্রি করতে দেয়
- ক্লাস এবং বিষয় ড্রপডাউনে শুধু নির্ধারিতগুলো দেখায়

#### উপস্থিতি (`teachers/attendance.php`)
- শুধুমাত্র নির্ধারিত ক্লাসের জন্য উপস্থিতি নিতে দেয়
- ক্লাস সিলেকশনে শুধু নির্ধারিত ক্লাসগুলো দেখায়

#### রিপোর্ট (`teachers/my_reports.php`)
- শুধুমাত্র নির্ধারিত ক্লাস এবং বিষয়ের জন্য রিপোর্ট তৈরি করে
- ক্লাস এবং বিষয় ফিল্টারে শুধু নির্ধারিতগুলো দেখায়

#### ছাত্র দেখা/এডিট (`teachers/view_student.php`, `teachers/edit_student.php`)
- শুধুমাত্র নির্ধারিত ক্লাসের ছাত্রদের দেখা/এডিট করতে দেয়
- অন্য ক্লাসের ছাত্রদের URL থেকে অ্যাক্সেস করলে রিডাইরেক্ট করে

## সিকিউরিটি মেজারসমূহ

### 1. ইনপুট ভ্যালিডেশন
- সব GET/POST প্যারামিটার ভ্যালিডেট করা হয়
- শিক্ষকের অ্যাক্সেস রাইট যাচাই করা হয়

### 2. ডাটাবেস লেভেল সিকিউরিটি
- WHERE ক্লজে শুধু নির্ধারিত ক্লাস ID গুলো ব্যবহার করা হয়
- SQL ইনজেকশন প্রতিরোধের জন্য প্রিপেয়ার্ড স্টেটমেন্ট ব্যবহার করা হয়

### 3. UI লেভেল রিস্ট্রিকশন
- ড্রপডাউন এবং ফিল্টারে শুধু অনুমোদিত অপশন দেখানো হয়
- অবৈধ রিকোয়েস্টে এরর মেসেজ দেখানো হয়

## ইমপ্লিমেন্টেশনের স্টেপস

### 1. শিক্ষক ক্লাস অ্যাসাইনমেন্ট
- অ্যাডমিন প্যানেল থেকে শিক্ষকদের ক্লাসে অ্যাসাইন করুন
- `class_teachers` টেবিলে রেকর্ড তৈরি করুন

### 2. অ্যাক্সেস কন্ট্রোল যাচাই
- প্রত্যেক টিচার পেজে শুরুতে অ্যাক্সেস কন্ট্রোল ফাংশন কল করুন
- অবৈধ অ্যাক্সেসে রিডাইরেক্ট করুন

### 3. UI আপডেট
- টিচার ইন্টারফেসে শুধু নির্ধারিত ক্লাস দেখান
- অ্যাক্সেস রিস্ট্রিকশন মেসেজ যোগ করুন

## টেস্টিং

### ম্যানুয়াল টেস্টিং স্টেপস
1. একজন শিক্ষক অ্যাকাউন্টে লগইন করুন
2. শুধু তাদের নির্ধারিত ক্লাস দেখতে পান কিনা যাচাই করুন
3. অন্য ক্লাসের URL দিয়ে অ্যাক্সেস করার চেষ্টা করুন
4. অবৈধ রিকোয়েস্টে প্রপার এরর মেসেজ দেখানো হয় কিনা যাচাই করুন

### অটোমেটেড টেস্টিং
```php
// Example test function
function test_teacher_access_control() {
    // Test teacher_has_class_access
    assert(teacher_has_class_access(1, 1) === true);
    assert(teacher_has_class_access(1, 999) === false);

    // Test teacher_has_student_access
    assert(teacher_has_student_access(1, 1) === true);
    assert(teacher_has_student_access(1, 999) === false);

    echo "All access control tests passed!";
}
```

## মেইনটেনেন্স

### রেগুলার চেকলিস্ট
- নতুন টিচার পেজ তৈরি করলে অ্যাক্সেস কন্ট্রোল যোগ করুন
- ডাটাবেস স্ট্রাকচার পরিবর্তন হলে হেলপার ফাংশন আপডেট করুন
- নতুন রোল যোগ করলে অ্যাক্সেস কন্ট্রোল লজিক রিভিউ করুন

### ট্রাবলশুটিং
- যদি শিক্ষক কোন ক্লাস দেখতে না পান, `class_teachers` টেবিল চেক করুন
- অ্যাক্সেস ডিনাইড এরর হলে লগ ফাইল চেক করুন
- UI আইস্যু হলে ক্লাস ফিল্টার লজিক যাচাই করুন

## ভবিষ্যত উন্নয়ন

### সম্ভাব্য ফিচার
- শিক্ষক পারমিশন লেভেল (read-only, read-write)
- টেম্পোরারি অ্যাক্সেস (প্রতিস্থাপন শিক্ষকের জন্য)
- অ্যাক্সেস লগ এবং অডিট ট্রেইল
- বাল্ক অ্যাক্সেস ম্যানেজমেন্ট

---

**তৈরি করেছেন:** AI Assistant
**তারিখ:** ৩১ ডিসেম্বর, ২০২৫
**ভার্সন:** ১.০
