119 lines
7.4 KiB
Python
119 lines
7.4 KiB
Python
from django.contrib.auth.models import AbstractUser
|
|
from django.db import models
|
|
from django.db.models.signals import post_migrate
|
|
from django.dispatch import receiver
|
|
|
|
|
|
class User(AbstractUser):
|
|
phone = models.CharField(max_length=20, blank=True)
|
|
department = models.CharField(max_length=100, blank=True)
|
|
position = models.CharField(max_length=100, blank=True)
|
|
is_active = models.BooleanField(default=True)
|
|
date_joined = models.DateTimeField(auto_now_add=True)
|
|
|
|
|
|
class Role(models.Model):
|
|
name = models.CharField(max_length=50, unique=True)
|
|
description = models.TextField(blank=True)
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class UserRole(models.Model):
|
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
|
role = models.ForeignKey(Role, on_delete=models.CASCADE)
|
|
assigned_at = models.DateTimeField(auto_now_add=True)
|
|
|
|
class Meta:
|
|
unique_together = ('user', 'role')
|
|
|
|
|
|
class Permission(models.Model):
|
|
name = models.CharField(max_length=100, unique=True)
|
|
codename = models.CharField(max_length=100, unique=True)
|
|
module = models.CharField(max_length=50) # e.g., 'inventory', 'sales'
|
|
description = models.TextField(blank=True)
|
|
|
|
|
|
class RolePermission(models.Model):
|
|
role = models.ForeignKey(Role, on_delete=models.CASCADE)
|
|
permission = models.ForeignKey(Permission, on_delete=models.CASCADE)
|
|
|
|
|
|
@receiver(post_migrate)
|
|
def create_default_permissions(sender, **kwargs):
|
|
"""Create default permissions for all modules"""
|
|
if sender.name == 'apps.accounts':
|
|
# Define default permissions for each module
|
|
default_permissions = [
|
|
# Dashboard permissions
|
|
{'name': 'View Dashboard', 'codename': 'view_dashboard', 'module': 'dashboard', 'description': 'Can view dashboard'},
|
|
|
|
# User management permissions
|
|
{'name': 'View User', 'codename': 'view_user', 'module': 'accounts', 'description': 'Can view user list and details'},
|
|
{'name': 'Add User', 'codename': 'add_user', 'module': 'accounts', 'description': 'Can create new users'},
|
|
{'name': 'Change User', 'codename': 'change_user', 'module': 'accounts', 'description': 'Can edit user information'},
|
|
{'name': 'Delete User', 'codename': 'delete_user', 'module': 'accounts', 'description': 'Can delete users'},
|
|
|
|
# Role management permissions
|
|
{'name': 'View Role', 'codename': 'view_role', 'module': 'accounts', 'description': 'Can view role list and details'},
|
|
{'name': 'Add Role', 'codename': 'add_role', 'module': 'accounts', 'description': 'Can create new roles'},
|
|
{'name': 'Change Role', 'codename': 'change_role', 'module': 'accounts', 'description': 'Can edit role information'},
|
|
{'name': 'Delete Role', 'codename': 'delete_role', 'module': 'accounts', 'description': 'Can delete roles'},
|
|
|
|
# Permission management permissions
|
|
{'name': 'View Permission', 'codename': 'view_permission', 'module': 'accounts', 'description': 'Can view permission list'},
|
|
{'name': 'Add Permission', 'codename': 'add_permission', 'module': 'accounts', 'description': 'Can create new permissions'},
|
|
{'name': 'Change Permission', 'codename': 'change_permission', 'module': 'accounts', 'description': 'Can edit permissions'},
|
|
{'name': 'Delete Permission', 'codename': 'delete_permission', 'module': 'accounts', 'description': 'Can delete permissions'},
|
|
|
|
# Inventory permissions
|
|
{'name': 'View Product', 'codename': 'view_product', 'module': 'inventory', 'description': 'Can view product list and details'},
|
|
{'name': 'Add Product', 'codename': 'add_product', 'module': 'inventory', 'description': 'Can create new products'},
|
|
{'name': 'Change Product', 'codename': 'change_product', 'module': 'inventory', 'description': 'Can edit product information'},
|
|
{'name': 'Delete Product', 'codename': 'delete_product', 'module': 'inventory', 'description': 'Can delete products'},
|
|
|
|
# Purchasing permissions
|
|
{'name': 'View Purchase Order', 'codename': 'view_purchaseorder', 'module': 'purchasing', 'description': 'Can view purchase orders'},
|
|
{'name': 'Add Purchase Order', 'codename': 'add_purchaseorder', 'module': 'purchasing', 'description': 'Can create purchase orders'},
|
|
{'name': 'Change Purchase Order', 'codename': 'change_purchaseorder', 'module': 'purchasing', 'description': 'Can edit purchase orders'},
|
|
{'name': 'Delete Purchase Order', 'codename': 'delete_purchaseorder', 'module': 'purchasing', 'description': 'Can delete purchase orders'},
|
|
|
|
# Sales permissions
|
|
{'name': 'View Sales Order', 'codename': 'view_salesorder', 'module': 'sales', 'description': 'Can view sales orders'},
|
|
{'name': 'Add Sales Order', 'codename': 'add_salesorder', 'module': 'sales', 'description': 'Can create sales orders'},
|
|
{'name': 'Change Sales Order', 'codename': 'change_salesorder', 'module': 'sales', 'description': 'Can edit sales orders'},
|
|
{'name': 'Delete Sales Order', 'codename': 'delete_salesorder', 'module': 'sales', 'description': 'Can delete sales orders'},
|
|
|
|
# Manufacturing permissions
|
|
{'name': 'View Manufacturing Order', 'codename': 'view_manufacturingorder', 'module': 'manufacturing', 'description': 'Can view manufacturing orders'},
|
|
{'name': 'Add Manufacturing Order', 'codename': 'add_manufacturingorder', 'module': 'manufacturing', 'description': 'Can create manufacturing orders'},
|
|
{'name': 'Change Manufacturing Order', 'codename': 'change_manufacturingorder', 'module': 'manufacturing', 'description': 'Can edit manufacturing orders'},
|
|
{'name': 'Delete Manufacturing Order', 'codename': 'delete_manufacturingorder', 'module': 'manufacturing', 'description': 'Can delete manufacturing orders'},
|
|
|
|
# Reports permissions
|
|
{'name': 'View Report', 'codename': 'view_report', 'module': 'reports', 'description': 'Can view reports'},
|
|
{'name': 'Add Report', 'codename': 'add_report', 'module': 'reports', 'description': 'Can create reports'},
|
|
{'name': 'Change Report', 'codename': 'change_report', 'module': 'reports', 'description': 'Can edit reports'},
|
|
{'name': 'Delete Report', 'codename': 'delete_report', 'module': 'reports', 'description': 'Can delete reports'},
|
|
|
|
# Database management permissions
|
|
{'name': 'View Database', 'codename': 'view_database', 'module': 'database_management', 'description': 'Can view database management'},
|
|
{'name': 'Add Database', 'codename': 'add_database', 'module': 'database_management', 'description': 'Can create database entries'},
|
|
{'name': 'Change Database', 'codename': 'change_database', 'module': 'database_management', 'description': 'Can edit database entries'},
|
|
{'name': 'Delete Database', 'codename': 'delete_database', 'module': 'database_management', 'description': 'Can delete database entries'},
|
|
]
|
|
|
|
# Create permissions if they don't exist
|
|
for perm_data in default_permissions:
|
|
Permission.objects.get_or_create(
|
|
codename=perm_data['codename'],
|
|
defaults=perm_data
|
|
)
|
|
|
|
class Meta:
|
|
unique_together = ('role', 'permission')
|