schon/engine/core/management/commands/initialize.py
Egor fureunoir Gorbunov 45ae5b02f3 Features: (1) Adjust group creation logic to assign permissions only when groups are newly created;
Fixes: (1) Correct conditional checks in group initialization to ensure permission assignment;

Extra: (1) Minor refactor to improve code readability around permission assignment logic;
2025-11-12 15:36:43 +03:00

156 lines
4.3 KiB
Python

import logging
from typing import Any
from django.contrib.auth.models import Permission
from django.core.management.base import BaseCommand
from engine.core.models import Vendor
from engine.vibes_auth.models import Group
logger = logging.getLogger(__name__)
user_support_permissions = [
"add_chatmessage",
"view_chatmessage",
"change_chatthread",
"view_chatthread",
"view_order",
"view_ordercrmlink",
"view_orderproduct",
"view_address",
"view_user",
"view_wishlist",
"view_balance",
"view_transaction",
]
stock_manager_permissions = [
"add_stock",
"change_stock",
"view_stock",
"add_category",
"change_category",
"view_category",
"add_brand",
"change_brand",
"view_brand",
"add_product",
"change_product",
"view_product",
"add_attribute",
"change_attribute",
"view_attribute",
"add_attributevalue",
"change_attributevalue",
"view_attributevalue",
"add_attributegroup",
"change_attributegroup",
"view_attributegroup",
"add_productimage",
"change_productimage",
"view_productimage",
]
head_stock_manager_permissions = [
*stock_manager_permissions,
"delete_stock",
"delete_product",
"delete_attribute",
"delete_attributevalue",
"delete_attributegroup",
"delete_productimage",
"add_vendor",
"change_vendor",
"view_vendor",
"view_user",
]
marketing_admin_permissions = [
"view_feedback",
"delete_feedback",
"add_producttag",
"change_producttag",
"delete_producttag",
"view_producttag",
"add_categorytag",
"change_categorytag",
"delete_categorytag",
"view_categorytag",
"add_promocode",
"change_promocode",
"delete_promocode",
"view_promocode",
"add_promotion",
"change_promotion",
"delete_promotion",
"view_promotion",
"view_wishlist",
"add_post",
"change_post",
"delete_post",
"view_post",
"add_posttag",
"change_posttag",
"delete_posttag",
"view_posttag",
"add_attachment",
"change_attachment",
"delete_attachment",
"view_attachment",
"add_messageattachment",
"change_messageattachment",
"delete_messageattachment",
"view_messageattachment",
]
e_commerce_admin_permissions = [
*user_support_permissions,
*head_stock_manager_permissions,
*marketing_admin_permissions,
"add_constance",
"change_constance",
"delete_constance",
"view_constance",
"add_gateway",
"change_gateway",
"delete_gateway",
"view_gateway",
"view_periodictask",
"view_periodictasks",
"change_user",
"view_group",
]
class Command(BaseCommand):
def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None:
self.stdout.write("Initializing must-have instances...")
Vendor.objects.get_or_create(name="INNER")
user_support, is_user_support_created = Group.objects.get_or_create(name="User Support")
if is_user_support_created:
perms = Permission.objects.filter(codename__in=user_support_permissions)
user_support.permissions.add(*perms)
stock_manager, is_stock_manager_created = Group.objects.get_or_create(name="Stock Manager")
if is_stock_manager_created:
perms = Permission.objects.filter(codename__in=stock_manager_permissions)
stock_manager.permissions.add(*perms)
head_stock_manager, is_head_stock_manager_created = Group.objects.get_or_create(name="Head Stock Manager")
if is_head_stock_manager_created:
perms = Permission.objects.filter(codename__in=head_stock_manager_permissions)
head_stock_manager.permissions.add(*perms)
marketing_admin, is_marketing_admin_created = Group.objects.get_or_create(name="Marketing Admin")
if is_marketing_admin_created:
perms = Permission.objects.filter(codename__in=marketing_admin_permissions)
marketing_admin.permissions.add(*perms)
e_commerce_admin, is_e_commerce_admin_created = Group.objects.get_or_create(name="E-Commerce Admin")
if is_e_commerce_admin_created:
perms = Permission.objects.filter(codename__in=e_commerce_admin_permissions)
e_commerce_admin.permissions.add(*perms)
self.stdout.write(self.style.SUCCESS("Successfully initialized must-have instances!"))