129 lines
4.5 KiB
Python
129 lines
4.5 KiB
Python
from django.core.management.base import BaseCommand
|
|
from django.contrib.auth import get_user_model
|
|
from users.models import UserGroup
|
|
|
|
User = get_user_model()
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Create default user groups with appropriate permissions'
|
|
|
|
def handle(self, *args, **options):
|
|
# Create Administrator group
|
|
admin_group, created = UserGroup.objects.get_or_create(
|
|
name='Administrators',
|
|
defaults={
|
|
'description': 'Administrator group with full access to all modules'
|
|
}
|
|
)
|
|
if created:
|
|
admin_group.permissions = {
|
|
'manufacturing': True,
|
|
'inventory': True,
|
|
'purchase': True,
|
|
'sales': True,
|
|
'user_management': True,
|
|
'reporting': True,
|
|
'dashboard': True
|
|
}
|
|
admin_group.save()
|
|
self.stdout.write(
|
|
self.style.SUCCESS('Successfully created Administrators group')
|
|
)
|
|
|
|
# Create Manager group
|
|
manager_group, created = UserGroup.objects.get_or_create(
|
|
name='Managers',
|
|
defaults={
|
|
'description': 'Manager group with access to core business modules'
|
|
}
|
|
)
|
|
if created:
|
|
manager_group.permissions = {
|
|
'manufacturing': True,
|
|
'inventory': True,
|
|
'purchase': True,
|
|
'sales': True,
|
|
'user_management': False,
|
|
'reporting': True,
|
|
'dashboard': True
|
|
}
|
|
manager_group.save()
|
|
self.stdout.write(
|
|
self.style.SUCCESS('Successfully created Managers group')
|
|
)
|
|
|
|
# Create Operator group
|
|
operator_group, created = UserGroup.objects.get_or_create(
|
|
name='Operators',
|
|
defaults={
|
|
'description': 'Operator group with access to operational modules'
|
|
}
|
|
)
|
|
if created:
|
|
operator_group.permissions = {
|
|
'manufacturing': True,
|
|
'inventory': True,
|
|
'purchase': False,
|
|
'sales': True,
|
|
'user_management': False,
|
|
'reporting': False,
|
|
'dashboard': True
|
|
}
|
|
operator_group.save()
|
|
self.stdout.write(
|
|
self.style.SUCCESS('Successfully created Operators group')
|
|
)
|
|
|
|
# Create Viewer group
|
|
viewer_group, created = UserGroup.objects.get_or_create(
|
|
name='Viewers',
|
|
defaults={
|
|
'description': 'Viewer group with read-only access to reports and dashboard'
|
|
}
|
|
)
|
|
if created:
|
|
viewer_group.permissions = {
|
|
'manufacturing': False,
|
|
'inventory': False,
|
|
'purchase': False,
|
|
'sales': False,
|
|
'user_management': False,
|
|
'reporting': True,
|
|
'dashboard': True
|
|
}
|
|
viewer_group.save()
|
|
self.stdout.write(
|
|
self.style.SUCCESS('Successfully created Viewers group')
|
|
)
|
|
|
|
# Assign existing users to appropriate groups
|
|
self.assign_users_to_groups()
|
|
|
|
self.stdout.write(
|
|
self.style.SUCCESS('Successfully created default groups and assigned users')
|
|
)
|
|
|
|
def assign_users_to_groups(self):
|
|
"""Assign existing users to appropriate groups"""
|
|
# Get the groups
|
|
try:
|
|
admin_group = UserGroup.objects.get(name='Administrators')
|
|
manager_group = UserGroup.objects.get(name='Managers')
|
|
operator_group = UserGroup.objects.get(name='Operators')
|
|
viewer_group = UserGroup.objects.get(name='Viewers')
|
|
except UserGroup.DoesNotExist:
|
|
self.stdout.write(
|
|
self.style.ERROR('One or more groups do not exist')
|
|
)
|
|
return
|
|
|
|
# Assign users to groups (this is a simple assignment, you may want to customize this)
|
|
for user in User.objects.all():
|
|
# If user doesn't have a group, assign them to the operator group by default
|
|
if not user.group:
|
|
user.group = operator_group
|
|
user.save()
|
|
|
|
self.stdout.write(
|
|
self.style.SUCCESS('Successfully assigned users to groups')
|
|
) |