Add IntelliJ IDEA project configuration files
This commit adds IntelliJ IDEA-specific configuration files for the project, including module setup, version control integration, inspection profiles, and workspace settings. These files facilitate development environment configuration for contributors using IntelliJ IDEA.
This commit is contained in:
+5
-5
@@ -12,13 +12,14 @@ class DepotUserAdmin(UserAdmin):
|
||||
'company',
|
||||
'line',
|
||||
'company_permissions',
|
||||
'new_field1',
|
||||
'is_company_admin',
|
||||
'user_type',
|
||||
)}),
|
||||
)
|
||||
|
||||
# Add fields to display in list view
|
||||
list_display = UserAdmin.list_display + ('phone_number', 'company', 'line', 'is_company_admin')
|
||||
list_display = ('username', 'email', 'user_type', 'company', 'line', 'is_active', 'is_staff', 'is_superuser')
|
||||
search_fields = ('username', 'email')
|
||||
list_filter = ('user_type', 'is_active', 'is_staff', 'is_superuser')
|
||||
|
||||
# Add fields to the add form
|
||||
add_fieldsets = UserAdmin.add_fieldsets + (
|
||||
@@ -28,7 +29,6 @@ class DepotUserAdmin(UserAdmin):
|
||||
'company',
|
||||
'line',
|
||||
'company_permissions',
|
||||
'new_field1',
|
||||
'is_company_admin',
|
||||
'user_type',
|
||||
)}),
|
||||
)
|
||||
+9
-2
@@ -16,18 +16,25 @@ class RegisterForm(ModelForm):
|
||||
password1 = CharField(label='Password', widget=PasswordInput)
|
||||
password2 = CharField(label='Confirm Password', widget=PasswordInput)
|
||||
|
||||
field_order = ['username', 'email', 'password1', 'password2', 'phone_number', 'line', 'company_permissions']
|
||||
field_order = ['username', 'email', 'password1', 'password2', 'phone_number', 'company', 'line', 'user_type', 'company_permissions', 'employee_permissions', 'is_active']
|
||||
|
||||
|
||||
class Meta:
|
||||
model = get_user_model()
|
||||
fields = ['username', 'email', 'password1', 'password2', 'phone_number', 'line', 'company_permissions']
|
||||
fields = ['username', 'email', 'password1', 'password2', 'phone_number', 'company', 'line', 'user_type', 'company_permissions', 'employee_permissions', 'is_active']
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.fields['password1'].widget.attrs.update({'autocomplete': 'new-password'})
|
||||
self.fields['password2'].widget.attrs.update({'autocomplete': 'new-password'})
|
||||
self.fields['user_type'].widget.attrs['disabled'] = True
|
||||
self.fields['company_permissions'].widget.attrs['disabled'] = True
|
||||
self.fields['employee_permissions'].widget.attrs['disabled'] = True
|
||||
|
||||
if self.data.get('user_type') in ( 'EM', 'BS'):
|
||||
self.fields['company_permissions'].required = False
|
||||
if self.data.get('user_type') in ('CL', 'CA', 'BS'):
|
||||
self.fields['company_permissions'].required = False
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = super().clean()
|
||||
|
||||
+66
-6
@@ -1,3 +1,4 @@
|
||||
from django.contrib.auth.base_user import BaseUserManager
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.db import models
|
||||
|
||||
@@ -13,11 +14,69 @@ class ClientPermission(models.Model):
|
||||
('can_view_bookings', 'Can view bookings'),
|
||||
('can_manage_company_users', 'Can manage company users'),
|
||||
)
|
||||
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class EmployeePermission(models.Model):
|
||||
codename = models.CharField(max_length=100, default='')
|
||||
name = models.CharField(max_length=255, default='')
|
||||
|
||||
class Meta:
|
||||
managed = True
|
||||
default_permissions = ()
|
||||
permissions = (
|
||||
('can_manage_containers', 'Can manage containers'),
|
||||
('can_view_reports', 'Can view reports'),
|
||||
('can_handle_operations', 'Can handle operations'),
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class CustomUserManager(BaseUserManager):
|
||||
def create_user(self, email, password=None, **extra_fields):
|
||||
if not email:
|
||||
raise ValueError('Users must have an email address')
|
||||
email = self.normalize_email(email)
|
||||
user = self.model(email=email, **extra_fields)
|
||||
user.set_password(password)
|
||||
user.save(using=self._db)
|
||||
return user
|
||||
|
||||
def create_superuser(self, email, password=None, **extra_fields):
|
||||
extra_fields.setdefault('is_staff', True)
|
||||
extra_fields.setdefault('is_superuser', True)
|
||||
extra_fields.setdefault('is_active', True)
|
||||
extra_fields.setdefault('user_type', 'AD') # Set user_type to admin
|
||||
|
||||
if extra_fields.get('is_staff') is not True:
|
||||
raise ValueError('Superuser must have is_staff=True.')
|
||||
if extra_fields.get('is_superuser') is not True:
|
||||
raise ValueError('Superuser must have is_superuser=True.')
|
||||
|
||||
return self.create_user(email, password, **extra_fields)
|
||||
|
||||
|
||||
class DepotUser(AbstractUser):
|
||||
|
||||
class UserType(models.TextChoices):
|
||||
BARRIER_STAFF = 'BS', 'Barrier Staff'
|
||||
COMPANY_ADMIN = 'CA', 'Company Admin'
|
||||
EMPLOYEE = 'EM', 'Employee'
|
||||
CLIENT = 'CL', 'Client',
|
||||
ADMIN = 'AD', 'Admin'
|
||||
|
||||
objects = CustomUserManager()
|
||||
|
||||
user_type = models.CharField(
|
||||
max_length=2,
|
||||
choices=UserType.choices,
|
||||
default=UserType.CLIENT
|
||||
)
|
||||
|
||||
phone_number = models.CharField(max_length=15, blank=True, null=True)
|
||||
email = models.EmailField(unique=True, blank=False, null=False)
|
||||
company = models.ForeignKey(
|
||||
@@ -36,13 +95,14 @@ class DepotUser(AbstractUser):
|
||||
)
|
||||
|
||||
company_permissions = models.ManyToManyField('ClientPermission')
|
||||
new_field1 = models.BooleanField(default=False)
|
||||
is_company_admin = models.BooleanField(default=False)
|
||||
employee_permissions = models.ManyToManyField('EmployeePermission', blank=True)
|
||||
|
||||
def has_company_perm(self, perm_codename):
|
||||
if self.is_superuser:
|
||||
return True
|
||||
return self.company_permissions.filter(
|
||||
codename=perm_codename,
|
||||
is_client_permission=self.company
|
||||
).exists()
|
||||
return self.company_permissions.filter(codename=perm_codename).exists()
|
||||
|
||||
def has_employee_perm(self, perm_codename):
|
||||
if self.is_superuser:
|
||||
return True
|
||||
return self.employee_permissions.filter(codename=perm_codename).exists()
|
||||
+59
-2
@@ -2,12 +2,17 @@ from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.views import LoginView
|
||||
from django.shortcuts import render
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.views.generic import TemplateView, FormView, ListView, UpdateView
|
||||
|
||||
from accounts.forms import LoginForm, RegisterForm
|
||||
from accounts.models import DepotUser
|
||||
|
||||
|
||||
from django.contrib.auth.decorators import login_required, user_passes_test
|
||||
from django.contrib.auth.mixins import AccessMixin
|
||||
# Create your views here.
|
||||
|
||||
|
||||
class DepotLoginView(LoginView):
|
||||
template_name = 'registration/login.html'
|
||||
# success_url = reverse_lazy('dashboard')
|
||||
@@ -15,19 +20,71 @@ class DepotLoginView(LoginView):
|
||||
next_page = reverse_lazy('dashboard')
|
||||
|
||||
|
||||
class RegisterView(FormView):
|
||||
def is_company_admin(user):
|
||||
return user.is_authenticated and user.is_company_admin
|
||||
|
||||
@method_decorator(login_required, name='dispatch')
|
||||
class RegisterView(AccessMixin, FormView):
|
||||
template_name = 'registration/register.html'
|
||||
form_class = RegisterForm
|
||||
# model = get_user_model()
|
||||
success_url = reverse_lazy('dashboard')
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
user: DepotUser = request.user
|
||||
|
||||
|
||||
if not (user.is_superuser or user.user_type == DepotUser.UserType.COMPANY_ADMIN):
|
||||
return self.handle_no_permission()
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
def form_valid(self, form):
|
||||
# Create user from form data
|
||||
user = form.save(commit=False)
|
||||
user_type = form.cleaned_data['user_type']
|
||||
|
||||
# Clear irrelevant permissions based on user type
|
||||
if user_type == DepotUser.UserType.CLIENT:
|
||||
user.employee_permissions.clear()
|
||||
elif user_type == DepotUser.UserType.EMPLOYEE:
|
||||
user.company_permissions.clear()
|
||||
|
||||
# user.set_password(form.cleaned_data['password'])
|
||||
user.save()
|
||||
return super().form_valid(form)
|
||||
|
||||
def get_form(self, form_class = None):
|
||||
form = super().get_form(form_class)
|
||||
user: DepotUser = self.request.user
|
||||
|
||||
if user.is_superuser:
|
||||
# Superuser can manage all permissions and user types
|
||||
form.fields['user_type'].widget.attrs['disabled'] = False
|
||||
form.fields['company_permissions'].widget.attrs['disabled'] = False
|
||||
form.fields['employee_permissions'].widget.attrs['disabled'] = False
|
||||
|
||||
# Show relevant permissions based on selected user type
|
||||
if form.initial.get('user_type') == DepotUser.UserType.CLIENT:
|
||||
form.fields['employee_permissions'].widget.attrs['disabled'] = True
|
||||
elif form.initial.get('user_type') == DepotUser.UserType.EMPLOYEE:
|
||||
form.fields['company_permissions'].widget.attrs['disabled'] = True
|
||||
|
||||
elif user.user_type == DepotUser.UserType.COMPANY_ADMIN:
|
||||
form.fields['company'].queryset = form.fields['company'].queryset.filter(pk=user.company.pk)
|
||||
form.fields['company'].initial = user.company
|
||||
form.fields['company'].widget.readonly = True # form.fields['line'].widget.attrs['disabled'] = True
|
||||
form.fields['line'].queryset = form.fields['line'].queryset.filter(company=user.company.pk)
|
||||
|
||||
form.fields['user_type'].choices = [
|
||||
(DepotUser.UserType.CLIENT, 'Client')
|
||||
]
|
||||
form.fields['user_type'].initial = DepotUser.UserType.CLIENT
|
||||
|
||||
form.fields['company_permissions'].widget.attrs['disabled'] = False
|
||||
form.fields['employee_permissions'].widget.attrs['disabled'] = True
|
||||
|
||||
return form
|
||||
|
||||
class UserListView(ListView):
|
||||
template_name = 'registration/register.html'
|
||||
# form_class = RegisterForm
|
||||
|
||||
Reference in New Issue
Block a user