perf: user profile api

This commit is contained in:
ibuler 2025-04-18 14:10:09 +08:00 committed by 老广
parent 533dbf316c
commit bcb112d5c6
5 changed files with 39 additions and 30 deletions

View File

@ -1,9 +1,9 @@
from rest_framework.response import Response
from rest_framework.decorators import action
from django.shortcuts import get_object_or_404
from rest_framework.decorators import action
from rest_framework.response import Response
from common.tree import TreeNodeSerializer
from common.api import JMSModelViewSet
from common.tree import TreeNodeSerializer
from ..models import Permission, Role
from ..serializers import PermissionSerializer

View File

@ -1,10 +1,9 @@
from django.contrib.auth.models import ContentType
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from ..models import Permission
__all__ = ['PermissionSerializer', 'UserPermsSerializer']
__all__ = ['PermissionSerializer']
class PermissionContentTypeSerializer(serializers.ModelSerializer):
@ -19,13 +18,3 @@ class PermissionSerializer(serializers.ModelSerializer):
class Meta:
model = Permission
fields = ['id', 'name', 'content_type', 'codename']
class UserPermsSerializer(serializers.Serializer):
perms = serializers.ListField(label=_('Perms'), read_only=True)
def create(self, validated_data):
pass
def update(self, instance, validated_data):
pass

View File

@ -17,7 +17,8 @@ from ..models import User
__all__ = [
'UserResetPasswordApi', 'UserResetPKApi',
'UserProfileApi', 'UserPasswordApi'
'UserProfileApi', 'UserPasswordApi',
'UserPermissionsApi'
]
@ -77,3 +78,11 @@ class UserPasswordApi(generics.RetrieveUpdateAPIView):
resp = super().update(request, *args, **kwargs)
ResetPasswordSuccessMsg(self.request.user, request).publish_async()
return resp
class UserPermissionsApi(generics.RetrieveAPIView):
permission_classes = (IsAuthenticated,)
serializer_class = serializers.UserPermsSerializer
def get_object(self):
return self.request.user

View File

@ -8,14 +8,6 @@ from .user import UserSerializer
from ..models import User, MFAMixin
class UserOrgSerializer(serializers.Serializer):
id = serializers.CharField()
name = serializers.CharField()
is_default = serializers.BooleanField(read_only=True)
is_root = serializers.BooleanField(read_only=True)
is_system = serializers.BooleanField(read_only=True)
class UserUpdatePasswordSerializer(serializers.ModelSerializer):
old_password = EncryptedField(required=True, max_length=128)
new_password = EncryptedField(required=True, max_length=128)
@ -71,16 +63,11 @@ class UserProfileSerializer(UserSerializer):
mfa_level = LabeledChoiceField(choices=MFAMixin.MFA_LEVEL_CHOICES, label=_("MFA"), required=False)
guide_url = serializers.SerializerMethodField()
receive_backends = serializers.ListField(child=serializers.CharField(), read_only=True)
console_orgs = UserOrgSerializer(many=True, read_only=True)
audit_orgs = UserOrgSerializer(many=True, read_only=True)
workbench_orgs = UserOrgSerializer(many=True, read_only=True)
perms = serializers.ListField(label=_("Perms"), read_only=True)
class Meta(UserSerializer.Meta):
read_only_fields = [
'date_joined', 'last_login', 'created_by', 'source',
'console_orgs', 'audit_orgs', 'workbench_orgs',
'receive_backends', 'perms',
'receive_backends',
]
fields_mini = [
'id', 'name', 'username', 'email',
@ -184,3 +171,26 @@ class ResetOTPSerializer(serializers.Serializer):
def update(self, instance, validated_data):
pass
class UserOrgSerializer(serializers.Serializer):
id = serializers.CharField()
name = serializers.CharField()
is_default = serializers.BooleanField(read_only=True)
is_root = serializers.BooleanField(read_only=True)
is_system = serializers.BooleanField(read_only=True)
class UserPermsSerializer(serializers.Serializer):
id = serializers.CharField(label=_("User ID"), read_only=True)
username = serializers.CharField(label=_("Username"), read_only=True)
console_orgs = UserOrgSerializer(many=True, read_only=True)
audit_orgs = UserOrgSerializer(many=True, read_only=True)
workbench_orgs = UserOrgSerializer(many=True, read_only=True)
perms = serializers.ListField(label=_("Perms"), read_only=True)
def create(self, validated_data):
pass
def update(self, instance, validated_data):
pass

View File

@ -22,6 +22,7 @@ urlpatterns = [
path('profile/', api.UserProfileApi.as_view(), name='user-profile'),
path('profile/password/', api.UserPasswordApi.as_view(), name='user-password'),
path('profile/mfa/reset/', api.UserResetMFAApi.as_view(), name='my-mfa-reset'),
path('profile/permissions/', api.UserPermissionsApi.as_view(), name='user-permissions'),
path('preference/', api.PreferenceApi.as_view(), name='preference'),
path('users/<uuid:pk>/mfa/reset/', api.UserResetMFAApi.as_view(), name='user-reset-mfa'),
path('users/<uuid:pk>/password/', api.UserChangePasswordApi.as_view(), name='change-user-password'),