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:
@@ -0,0 +1,34 @@
|
||||
from django.contrib import admin
|
||||
from django.contrib.auth.admin import UserAdmin
|
||||
from .models import DepotUser
|
||||
|
||||
|
||||
@admin.register(DepotUser)
|
||||
class DepotUserAdmin(UserAdmin):
|
||||
# Add your custom fields to the fieldsets
|
||||
fieldsets = UserAdmin.fieldsets + (
|
||||
('Additional Info', {'fields': (
|
||||
'phone_number',
|
||||
'company',
|
||||
'line',
|
||||
'company_permissions',
|
||||
'new_field1',
|
||||
'is_company_admin',
|
||||
)}),
|
||||
)
|
||||
|
||||
# Add fields to display in list view
|
||||
list_display = UserAdmin.list_display + ('phone_number', 'company', 'line', 'is_company_admin')
|
||||
|
||||
# Add fields to the add form
|
||||
add_fieldsets = UserAdmin.add_fieldsets + (
|
||||
('Additional Info', {'fields': (
|
||||
'email',
|
||||
'phone_number',
|
||||
'company',
|
||||
'line',
|
||||
'company_permissions',
|
||||
'new_field1',
|
||||
'is_company_admin',
|
||||
)}),
|
||||
)
|
||||
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class UsersConfig(AppConfig):
|
||||
default_auto_field = "django.db.models.BigAutoField"
|
||||
name = "accounts"
|
||||
@@ -0,0 +1,16 @@
|
||||
from django.contrib.auth.backends import ModelBackend
|
||||
|
||||
|
||||
class CompanyUserBackend(ModelBackend):
|
||||
def get_user_permissions(self, user_obj, obj=None):
|
||||
if not user_obj.is_active or user_obj.is_anonymous:
|
||||
return set()
|
||||
|
||||
if user_obj.is_superuser:
|
||||
return super().get_user_permissions(user_obj, obj)
|
||||
|
||||
perms = super().get_user_permissions(user_obj, obj)
|
||||
if user_obj.company and user_obj.company.is_client:
|
||||
# Filter permissions based on client company context
|
||||
perms = {p for p in perms if p.startswith('accounts.client_')}
|
||||
return perms
|
||||
@@ -0,0 +1,7 @@
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.forms import AuthenticationForm
|
||||
|
||||
class LoginForm(AuthenticationForm):
|
||||
field_order = ['username', 'password']
|
||||
class Meta:
|
||||
model = get_user_model()
|
||||
@@ -0,0 +1,44 @@
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.db import models
|
||||
|
||||
class ClientPermission(models.Model):
|
||||
class Meta:
|
||||
managed = True
|
||||
default_permissions = ()
|
||||
permissions = (
|
||||
('can_book_container', 'Can book container'),
|
||||
('can_view_bookings', 'Can view bookings'),
|
||||
('can_manage_company_users', 'Can manage company users'),
|
||||
)
|
||||
|
||||
|
||||
class DepotUser(AbstractUser):
|
||||
|
||||
phone_number = models.CharField(max_length=15, blank=True, null=True)
|
||||
email = models.EmailField(unique=True, blank=False, null=False)
|
||||
company = models.ForeignKey(
|
||||
'common.CompanyModel',
|
||||
on_delete=models.CASCADE,
|
||||
related_name='user_lines',
|
||||
blank=True,
|
||||
null=True
|
||||
)
|
||||
line = models.ForeignKey(
|
||||
'common.LinesModel',
|
||||
on_delete=models.CASCADE,
|
||||
related_name='user_lines',
|
||||
blank=True,
|
||||
null=True
|
||||
)
|
||||
|
||||
company_permissions = models.ManyToManyField('ClientPermission')
|
||||
new_field1 = models.BooleanField(default=False)
|
||||
is_company_admin = models.BooleanField(default=False)
|
||||
|
||||
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()
|
||||
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
@@ -0,0 +1,8 @@
|
||||
from django.urls import path
|
||||
from django.contrib.auth import views as auth_views
|
||||
from accounts import views
|
||||
|
||||
urlpatterns = [
|
||||
path('login/', views.DepotLoginView.as_view(), name='login'),
|
||||
path('relogin/', auth_views.logout_then_login, name='relogin'),
|
||||
]
|
||||
@@ -0,0 +1,17 @@
|
||||
from django.contrib.auth.views import LoginView
|
||||
from django.shortcuts import render
|
||||
from django.urls import reverse_lazy
|
||||
from django.views.generic import TemplateView, FormView
|
||||
|
||||
from accounts.forms import LoginForm
|
||||
|
||||
|
||||
# Create your views here.
|
||||
class DepotLoginView(LoginView):
|
||||
template_name = 'registration/login.html'
|
||||
# success_url = reverse_lazy('dashboard')
|
||||
form_class = LoginForm
|
||||
next_page = reverse_lazy('dashboard')
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user