You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.9 KiB
52 lines
1.9 KiB
from django.core.management.base import BaseCommand
|
|
from django.contrib.auth.models import Group, Permission
|
|
from django.contrib.contenttypes.models import ContentType
|
|
|
|
from apps.account.models import User
|
|
|
|
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Create default groups and assign permissions to them'
|
|
|
|
def handle(self, *args, **kwargs):
|
|
# تعریف گروهها و پرمیشنها
|
|
groups_permissions = {
|
|
"Professor Group": [
|
|
"view_user", "add_user", "change_user"
|
|
],
|
|
"Client Group": [
|
|
"view_user"
|
|
],
|
|
"Admin Group": [
|
|
"view_user", "add_user", "change_user", "delete_user"
|
|
],
|
|
"Super Admin Group": [
|
|
"view_user", "add_user", "change_user", "delete_user", "manage_permissions"
|
|
],
|
|
"Student Group": [
|
|
"view_user"
|
|
]
|
|
}
|
|
|
|
content_type = ContentType.objects.get_for_model(User)
|
|
|
|
for group_name, permissions in groups_permissions.items():
|
|
group, created = Group.objects.get_or_create(name=group_name)
|
|
if created:
|
|
self.stdout.write(self.style.SUCCESS(f"Group '{group_name}' created successfully."))
|
|
else:
|
|
self.stdout.write(self.style.WARNING(f"Group '{group_name}' already exists."))
|
|
|
|
for perm_codename in permissions:
|
|
permission, created = Permission.objects.get_or_create(
|
|
codename=perm_codename,
|
|
defaults={
|
|
'name': f"Can {perm_codename.replace('_', ' ')} User",
|
|
'content_type': content_type
|
|
}
|
|
)
|
|
group.permissions.add(permission)
|
|
|
|
self.stdout.write(self.style.SUCCESS("All groups and permissions have been created successfully."))
|