This commit is contained in:
behruz-dev
2025-08-06 13:59:45 +05:00
parent 7e0eb3ec57
commit 18ff76aaa6
15 changed files with 144 additions and 41 deletions

View File

@@ -10,7 +10,9 @@ class UserAdmin(DjangoUserAdmin):
change_user_password_template = None
fieldsets = (
(None, {"fields": ("username", "password")}),
(_("Personal info"), {"fields": ("first_name", "last_name", "email", "role")}),
(_("Personal info"), {"fields": (
"full_name", 'phone_number', "role", 'profile_image', 'is_blocked'
)}),
(_("Important dates"), {"fields": ("last_login", "date_joined")}),
)
add_fieldsets = (
@@ -22,7 +24,7 @@ class UserAdmin(DjangoUserAdmin):
},
),
)
list_display = ("username", "email", "first_name", "last_name", "is_staff")
list_filter = ("is_staff", "is_superuser", "is_active", "groups")
search_fields = ("username", "first_name", "last_name", "email")
list_display = ("username", "phone_number", "full_name", "is_blocked", "is_staff")
list_filter = ("is_staff", "is_superuser", "is_active", "is_blocked")
search_fields = ("username", "full_name", "phone_number")
ordering = ("username",)

View File

@@ -0,0 +1,36 @@
# Generated by Django 5.2.4 on 2025-08-06 12:58
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0003_alter_role_permissions'),
]
operations = [
migrations.RemoveField(
model_name='user',
name='first_name',
),
migrations.RemoveField(
model_name='user',
name='last_name',
),
migrations.AddField(
model_name='user',
name='full_name',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='user',
name='is_blocked',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='user',
name='phone_number',
field=models.CharField(max_length=15, null=True),
),
]

View File

@@ -11,7 +11,12 @@ class User(BaseModel, AbstractUser):
upload_to="users/profile_images/", null=True, blank=True, verbose_name=_('profil rasmi')
)
role = models.ForeignKey(Role, on_delete=models.DO_NOTHING, null=True, related_name="users")
full_name = models.CharField(max_length=200, null=True)
is_blocked = models.BooleanField(default=False)
phone_number = models.CharField(max_length=15, null=True)
first_name = None
last_name = None
REQUIRED_FIELDS = []
def __str__(self):

View File

@@ -9,10 +9,10 @@ class HasRolePermission(BasePermission):
required_permissions = getattr(view, 'required_permissions', [])
if not required_permissions:
return True
return True
if user.role:
user_permissions = user.role.permissions.values_list('code', flat=True)
return all(perm in user_permissions for perm in required_permissions)
return any(perm in user_permissions for perm in required_permissions)
return False

View File

@@ -9,7 +9,7 @@ class UserProfileSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = [
'id', 'first_name', 'last_name', 'username', 'role', 'profile_image', 'permissions'
'id', 'full_name', 'username', 'phone_number', 'is_blocked', 'role', 'profile_image', 'permissions'
]
extra_kwargs = {'role': {'read_only': True}, "permissions": {'read_only': True}}

View File

@@ -18,8 +18,8 @@ class LoginApiView(generics.GenericAPIView):
user = serializer.validated_data.get('user')
token = RefreshToken.for_user(user)
user_data = {
'role': user.role.name,
'permissions': user.role.permissions.values_list('code', flat=True),
'role': user.role.name if user.role else None,
'permissions': user.role.permissions.values_list('code', flat=True) if user.role else None,
}
return Response(
{"access": str(token.access_token), "refresh": str(token), 'user_data': user_data},