Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
L
library-app-django
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ilham Maulana
library-app-django
Commits
b702d4bd
Commit
b702d4bd
authored
Jul 15, 2024
by
Ilham Maulana
💻
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: custome permission for librarian and memeber, and login history api
parent
81f82bd8
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
93 additions
and
17 deletions
+93
-17
permissions.py
api/auth/permissions.py
+23
-0
serializers.py
api/auth/serializers.py
+11
-5
views.py
api/auth/views.py
+55
-12
urls.py
api/urls.py
+4
-0
No files found.
api/auth/permissions.py
0 → 100644
View file @
b702d4bd
from
rest_framework
import
permissions
class
IsStaffUser
(
permissions
.
BasePermission
):
def
has_permission
(
self
,
request
,
view
):
if
request
.
method
!=
"POST"
and
not
request
.
user
.
is_staff
:
return
False
elif
request
.
method
!=
"POST"
and
not
request
.
user
.
is_authenticated
:
return
False
return
True
class
IsNotStaffUser
(
permissions
.
BasePermission
):
def
has_permission
(
self
,
request
,
view
):
if
request
.
method
!=
"POST"
and
request
.
user
.
is_staff
:
return
False
elif
request
.
method
!=
"POST"
and
not
request
.
user
.
is_authenticated
:
return
False
return
True
api/auth/serializers.py
View file @
b702d4bd
from
rest_framework
import
serializers
from
users.models
import
User
,
Librarian
,
Member
from
users.models
import
User
,
Librarian
,
Member
,
LibrarianLoginHistory
class
UserSerializer
(
serializers
.
ModelSerializer
):
...
...
@@ -23,12 +23,18 @@ class UserSerializer(serializers.ModelSerializer):
)
class
LoginHistorySerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
LibrarianLoginHistory
fields
=
"__all__"
class
LibrarianSerializer
(
serializers
.
ModelSerializer
):
user
_detail
=
UserSerializer
(
source
=
"user"
)
user
=
UserSerializer
(
)
class
Meta
:
model
=
Librarian
fields
=
[
"user
_detail
"
,
"picture"
,
"created_at"
,
"updated_at"
]
fields
=
[
"user"
,
"picture"
,
"created_at"
,
"updated_at"
]
def
create
(
self
,
validated_data
):
user_data
=
validated_data
.
pop
(
"user"
)
...
...
@@ -73,11 +79,11 @@ class LibrarianSerializer(serializers.ModelSerializer):
class
MemberSerializer
(
serializers
.
ModelSerializer
):
user
_detail
=
UserSerializer
(
source
=
"user"
)
user
=
UserSerializer
(
)
class
Meta
:
model
=
Member
fields
=
[
"user
_detail
"
,
"picture"
,
"created_at"
,
"updated_at"
]
fields
=
[
"user"
,
"picture"
,
"created_at"
,
"updated_at"
]
def
create
(
self
,
validated_data
):
user_data
=
validated_data
.
pop
(
"user"
)
...
...
api/auth/views.py
View file @
b702d4bd
from
django.contrib.auth
import
authenticate
,
login
,
logout
from
rest_framework
import
views
,
viewsets
,
permissions
,
status
from
rest_framework
import
views
,
viewsets
,
status
from
rest_framework.response
import
Response
from
rest_framework.filters
import
SearchFilter
from
.serializers
import
(
Librarian
,
LibrarianSerializer
,
LibrarianLoginHistory
,
LoginHistorySerializer
,
Member
,
MemberSerializer
,
)
from
.permissions
import
IsStaffUser
,
IsNotStaffUser
class
LibrarianViewSet
(
viewsets
.
ModelViewSet
):
permission_classes
=
[
permissions
.
IsAuthenticated
]
permission_classes
=
[
IsStaffUser
]
queryset
=
Librarian
.
objects
.
all
()
.
order_by
(
"created_at"
)
serializer_class
=
LibrarianSerializer
def
list
(
self
,
request
):
if
not
self
.
request
.
user
.
is_staff
:
return
Response
(
{
"message"
:
"Access Denied"
},
status
=
status
.
HTTP_406_NOT_ACCEPTABLE
)
queryset
=
self
.
filter_queryset
(
self
.
get_queryset
())
serializer
=
self
.
get_serializer
(
queryset
,
many
=
True
)
return
Response
(
serializer
.
data
)
filter_backends
=
[
SearchFilter
]
search_fields
=
[
"user__username"
,
"user__email"
,
"user__first_name"
,
"user__last_name"
,
]
def
update
(
self
,
request
,
pk
):
instance
=
self
.
get_object
()
...
...
@@ -34,10 +36,18 @@ class LibrarianViewSet(viewsets.ModelViewSet):
class
MemberViewSet
(
viewsets
.
ModelViewSet
):
permission_classes
=
[
permissions
.
IsAuthenticated
]
permission_classes
=
[
IsNotStaffUser
]
queryset
=
Member
.
objects
.
all
()
.
order_by
(
"created_at"
)
serializer_class
=
MemberSerializer
filter_backends
=
[
SearchFilter
]
search_fields
=
[
"user__username"
,
"user__email"
,
"user__first_name"
,
"user__last_name"
,
]
def
list
(
self
,
request
):
if
self
.
request
.
user
.
is_staff
:
return
Response
(
...
...
@@ -102,9 +112,42 @@ class LibrarianLoginView(LoginBaseView):
else
:
login
(
request
,
self
.
user
)
librarian
=
Librarian
.
objects
.
get
(
user
=
self
.
user
)
LibrarianLoginHistory
.
objects
.
create
(
librarian
=
librarian
)
return
response
class
LibrarianLoginHistoryViewSet
(
viewsets
.
ModelViewSet
):
permission_classes
=
[
IsStaffUser
]
queryset
=
LibrarianLoginHistory
.
objects
.
all
()
.
order_by
(
"date"
)
serializer_class
=
LoginHistorySerializer
filter_backends
=
[
SearchFilter
]
search_fields
=
[
"librarian__name"
]
class
LibrarianViewSet
(
viewsets
.
ModelViewSet
):
permission_classes
=
[
IsStaffUser
]
queryset
=
Librarian
.
objects
.
all
()
.
order_by
(
"created_at"
)
serializer_class
=
LibrarianSerializer
filter_backends
=
[
SearchFilter
]
search_fields
=
[
"user__username"
,
"user__email"
,
"user__first_name"
,
"user__last_name"
,
]
def
update
(
self
,
request
,
pk
):
instance
=
self
.
get_object
()
serializer
=
self
.
get_serializer
(
instance
,
data
=
request
.
data
,
partial
=
True
)
serializer
.
is_valid
(
raise_exception
=
True
)
serializer
.
save
()
return
Response
(
serializer
.
data
,
status
=
status
.
HTTP_200_OK
)
class
MemberLoginView
(
LoginBaseView
):
def
post
(
self
,
request
):
response
=
super
()
.
post
(
request
)
...
...
api/urls.py
View file @
b702d4bd
...
...
@@ -5,6 +5,7 @@ from .auth.views import (
LibrarianViewSet
,
LibrarianLoginView
,
LibrarianLogoutView
,
LibrarianLoginHistoryViewSet
,
MemberViewSet
,
MemberLoginView
,
MemberLogoutView
,
...
...
@@ -30,6 +31,9 @@ router.register(
router
.
register
(
r"upcoming-loans"
,
UpComingBookLoanViewSet
,
basename
=
"book_loans_upcoming"
)
router
.
register
(
r"login-history"
,
LibrarianLoginHistoryViewSet
,
basename
=
"librarian_login_history"
)
router_member_loan
=
routers
.
DefaultRouter
()
router_member_loan
.
register
(
r"loans"
,
MemberLoanViewSet
,
basename
=
"member_loans"
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment