Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
G
Géocontrib Django
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Redmine
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
GéoContrib
Géocontrib Django
Commits
b3432aed
Commit
b3432aed
authored
1 month ago
by
Timothee P
Browse files
Options
Downloads
Patches
Plain Diff
feat(signup): création d'un utilisateur avec ajout dans groupe d'utilisateurs
parent
e3debda1
No related branches found
No related tags found
1 merge request
!532
REDMINE_ISSUE-25582 | Mise en place d’un système de vérification lors de la création d’un compte utilisateur
Pipeline
#40966
passed
1 month ago
Stage: test
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
api/serializers/__init__.py
+2
-0
2 additions, 0 deletions
api/serializers/__init__.py
api/serializers/user.py
+31
-0
31 additions, 0 deletions
api/serializers/user.py
api/views/user.py
+21
-3
21 additions, 3 deletions
api/views/user.py
with
54 additions
and
3 deletions
api/serializers/__init__.py
+
2
−
0
View file @
b3432aed
...
...
@@ -28,6 +28,7 @@ from .project import ProjectDetailedSerializer
from
.project
import
ProjectCreationSerializer
from
.project
import
ProjectAuthorizationSerializer
from
.project
import
ProjectAttributeSerializer
from
.user
import
UserCreateSerializer
from
.user
import
UsersGroupsSerializer
from
.user
import
UserLevelsPermissionSerializer
from
.user
import
GeneratedTokenSerializer
...
...
@@ -65,6 +66,7 @@ __all__ = [
'
ProjectAttributeSerializer
'
,
'
StackedEventSerializer
'
,
'
UserSerializer
'
,
'
UserCreateSerializer
'
,
'
UsersGroupsSerializer
'
,
'
UserLevelsPermissionSerializer
'
,
]
This diff is collapsed.
Click to expand it.
api/serializers/user.py
+
31
−
0
View file @
b3432aed
...
...
@@ -4,6 +4,7 @@ from rest_framework import serializers
from
geocontrib.models
import
Authorization
from
geocontrib.models
import
UsersGroup
from
geocontrib.models
import
UserGroupMembership
from
geocontrib.models
import
UserLevelPermission
from
geocontrib.models
import
GeneratedToken
...
...
@@ -34,6 +35,36 @@ class UserSerializer(serializers.ModelSerializer):
'
id
'
,
]
class
UserCreateSerializer
(
serializers
.
ModelSerializer
):
password
=
serializers
.
CharField
(
write_only
=
True
,
required
=
True
,
style
=
{
'
input_type
'
:
'
password
'
})
usersgroups
=
serializers
.
ListField
(
child
=
serializers
.
CharField
(),
required
=
False
,
write_only
=
True
)
class
Meta
:
model
=
User
fields
=
[
'
username
'
,
'
first_name
'
,
'
last_name
'
,
'
email
'
,
'
password
'
,
'
usersgroups
'
]
def
create
(
self
,
validated_data
):
usersgroups_data
=
validated_data
.
pop
(
'
usersgroups
'
,
[])
# Récupère et supprime `usersgroups`
# Création de l'utilisateur
user
=
User
.
objects
.
create_user
(
username
=
validated_data
[
'
username
'
],
first_name
=
validated_data
.
get
(
'
first_name
'
,
''
),
last_name
=
validated_data
.
get
(
'
last_name
'
,
''
),
email
=
validated_data
.
get
(
'
email
'
,
''
),
password
=
validated_data
[
'
password
'
]
)
# Ajout de l'utilisateur aux groupes s'ils existent
for
group_codename
in
usersgroups_data
:
group
=
UsersGroup
.
objects
.
filter
(
codename
=
group_codename
).
first
()
if
group
:
UserGroupMembership
.
objects
.
create
(
user
=
user
,
group
=
group
)
return
user
class
UserLevelPermissionSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
...
...
This diff is collapsed.
Click to expand it.
api/views/user.py
+
21
−
3
View file @
b3432aed
...
...
@@ -9,10 +9,12 @@ from rest_framework import mixins
from
rest_framework
import
views
from
rest_framework
import
viewsets
from
rest_framework
import
permissions
from
rest_framework
import
status
from
rest_framework.generics
import
ListAPIView
from
rest_framework.response
import
Response
from
api.serializers
import
UserSerializer
from
api.serializers
import
UserCreateSerializer
from
api.serializers
import
UsersGroupsSerializer
from
api.serializers
import
UserLevelsPermissionSerializer
from
api.serializers
import
GeneratedTokenSerializer
...
...
@@ -288,7 +290,11 @@ class LoginByTokenView(views.APIView):
class
UserViewSet
(
viewsets
.
ModelViewSet
):
queryset
=
User
.
objects
.
all
().
order_by
(
'
-date_joined
'
)
serializer_class
=
UserSerializer
permission_classes
=
[
permissions
.
IsAuthenticated
]
def
get_permissions
(
self
):
if
self
.
action
==
'
create
'
:
# Permettre l'accès à tout le monde pour la création
return
[
permissions
.
AllowAny
()]
return
[
permissions
.
IsAuthenticated
()]
# Authentification requise pour les autres actions
@swagger_auto_schema
(
tags
=
[
"
users
"
],
...
...
@@ -306,10 +312,22 @@ class UserViewSet(viewsets.ModelViewSet):
@swagger_auto_schema
(
tags
=
[
"
users
"
],
operation_summary
=
"
Create a new user
"
operation_summary
=
"
Create a new user
"
,
request_body
=
UserCreateSerializer
)
def
create
(
self
,
request
,
*
args
,
**
kwargs
):
return
super
().
create
(
request
,
*
args
,
**
kwargs
)
serializer
=
UserCreateSerializer
(
data
=
request
.
data
)
if
serializer
.
is_valid
():
user
=
serializer
.
save
()
return
Response
({
"
message
"
:
"
User created successfully
"
,
"
user_id
"
:
user
.
id
,
"
username
"
:
user
.
username
,
"
first_name
"
:
user
.
first_name
,
"
last_name
"
:
user
.
last_name
,
"
email
"
:
user
.
email
},
status
=
status
.
HTTP_201_CREATED
)
return
Response
(
serializer
.
errors
,
status
=
status
.
HTTP_400_BAD_REQUEST
)
@swagger_auto_schema
(
tags
=
[
"
users
"
],
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment