signals: add signal to create HOD group
This commit is contained in:
1 parent
909f793afa
commit
3cdaf2ab0c
1 file changed
+105
-41
+105
-41
@@ -278,48 +278,112 @@ def handle_parent_student_relationship(
|
|||||||
@receiver(post_migrate)
|
@receiver(post_migrate)
|
||||||
def create_user_groups(sender, **kwargs):
|
def create_user_groups(sender, **kwargs):
|
||||||
"""
|
"""
|
||||||
Create initial user groups and permissions after migrations.
|
Signal handler to create default user groups after database migrations:
|
||||||
This ensures groups exist before any user is created.
|
- Student
|
||||||
|
- Parent
|
||||||
|
- Teacher
|
||||||
|
- HOD
|
||||||
|
- Admission Officer
|
||||||
"""
|
"""
|
||||||
from django.contrib.auth.models import Group, Permission
|
if sender.name == 'app': # Only run for our app's migrations
|
||||||
|
try:
|
||||||
# Create the necessary groups
|
# Create Student group
|
||||||
groups_data = {
|
student_group, created = Group.objects.get_or_create(name="Student")
|
||||||
"Student": ["view_attendance", "view_notice", "view_subject"],
|
if created:
|
||||||
"Teacher": [
|
# Add basic student permissions
|
||||||
"view_student",
|
permissions = Permission.objects.filter(
|
||||||
"view_attendance",
|
codename__in=[
|
||||||
"add_attendance",
|
"view_routine",
|
||||||
"change_attendance",
|
"view_attendance",
|
||||||
"view_notice",
|
"view_notice",
|
||||||
"add_notice",
|
"add_studentleave",
|
||||||
"view_subject",
|
"view_studentleave"
|
||||||
"change_subject",
|
]
|
||||||
],
|
)
|
||||||
"Parent": ["view_student", "view_attendance", "view_notice"],
|
student_group.permissions.add(*permissions)
|
||||||
"Admission Officer": [
|
logger.info("Created Student group with basic permissions")
|
||||||
"view_student",
|
|
||||||
"add_student",
|
# Create Parent group
|
||||||
"change_student",
|
parent_group, created = Group.objects.get_or_create(name="Parent")
|
||||||
"view_parent",
|
if created:
|
||||||
"add_parent",
|
# Add basic parent permissions
|
||||||
"change_parent",
|
permissions = Permission.objects.filter(
|
||||||
"view_course",
|
codename__in=[
|
||||||
"view_batch",
|
"view_student",
|
||||||
"view_notice",
|
"view_attendance",
|
||||||
],
|
"view_notice",
|
||||||
}
|
"view_routine"
|
||||||
|
]
|
||||||
for group_name, permissions in groups_data.items():
|
)
|
||||||
group, created = Group.objects.get_or_create(name=group_name)
|
parent_group.permissions.add(*permissions)
|
||||||
|
logger.info("Created Parent group with basic permissions")
|
||||||
if created:
|
|
||||||
print(f"Created user group: {group_name}")
|
# Create Teacher group
|
||||||
|
teacher_group, created = Group.objects.get_or_create(name="Teacher")
|
||||||
# Add permissions to group
|
if created:
|
||||||
perms = Permission.objects.filter(codename__in=permissions)
|
# Add teacher permissions
|
||||||
group.permissions.add(*perms)
|
permissions = Permission.objects.filter(
|
||||||
print(f"Added {perms.count()} permissions to {group_name} group")
|
codename__in=[
|
||||||
|
"view_student",
|
||||||
|
"view_attendance",
|
||||||
|
"add_attendance",
|
||||||
|
"change_attendance",
|
||||||
|
"view_notice",
|
||||||
|
"view_routine",
|
||||||
|
"view_subject"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
teacher_group.permissions.add(*permissions)
|
||||||
|
logger.info("Created Teacher group with basic permissions")
|
||||||
|
|
||||||
|
# Create HOD group
|
||||||
|
hod_group, created = Group.objects.get_or_create(name="HOD")
|
||||||
|
if created:
|
||||||
|
# Add HOD permissions - more permissions than regular teacher
|
||||||
|
permissions = Permission.objects.filter(
|
||||||
|
codename__in=[
|
||||||
|
"view_student",
|
||||||
|
"add_student",
|
||||||
|
"change_student",
|
||||||
|
"view_attendance",
|
||||||
|
"add_attendance",
|
||||||
|
"change_attendance",
|
||||||
|
"view_notice",
|
||||||
|
"add_notice",
|
||||||
|
"change_notice",
|
||||||
|
"view_routine",
|
||||||
|
"add_routine",
|
||||||
|
"change_routine",
|
||||||
|
"view_subject",
|
||||||
|
"add_subject",
|
||||||
|
"change_subject",
|
||||||
|
"view_staff",
|
||||||
|
"view_course"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
hod_group.permissions.add(*permissions)
|
||||||
|
logger.info("Created HOD group with administrative permissions")
|
||||||
|
|
||||||
|
# Create Admission Officer group
|
||||||
|
admission_group, created = Group.objects.get_or_create(name="Admission Officer")
|
||||||
|
if created:
|
||||||
|
# Add admission officer permissions
|
||||||
|
permissions = Permission.objects.filter(
|
||||||
|
codename__in=[
|
||||||
|
"view_student",
|
||||||
|
"add_student",
|
||||||
|
"change_student",
|
||||||
|
"view_course",
|
||||||
|
"view_batch",
|
||||||
|
"add_batch",
|
||||||
|
"change_batch"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
admission_group.permissions.add(*permissions)
|
||||||
|
logger.info("Created Admission Officer group with admission permissions")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Error creating default user groups: {str(e)}")
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
|
|||||||
Reference in new issue
Block a user