working on manual logout: block access token
This commit is contained in:
@@ -3,14 +3,16 @@ from rest_framework.permissions import AllowAny, IsAuthenticated
|
||||
from apps.authorization.api.v1.serializers import (
|
||||
RoleSerializer,
|
||||
PermissionSerializer,
|
||||
UserRelationSerializer
|
||||
UserRelationSerializer,
|
||||
PageSerializer
|
||||
)
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
from apps.authorization.models import (
|
||||
Role,
|
||||
Permissions,
|
||||
UserRelations
|
||||
UserRelations,
|
||||
Page
|
||||
)
|
||||
from rest_framework import viewsets
|
||||
from django.db import transaction
|
||||
@@ -23,27 +25,22 @@ class RoleViewSet(viewsets.ModelViewSet):
|
||||
serializer_class = RoleSerializer
|
||||
|
||||
|
||||
class PageViewSet(viewsets.ModelViewSet):
|
||||
""" add website pages to system to set permission on it """
|
||||
|
||||
queryset = Page.objects.all()
|
||||
serializer_class = PageSerializer
|
||||
|
||||
|
||||
class PermissionViewSet(viewsets.ModelViewSet):
|
||||
""" Crud Operations for Permissions """
|
||||
|
||||
queryset = Permissions.objects.all()
|
||||
serializer_class = PermissionSerializer
|
||||
|
||||
@action(
|
||||
methods=['get'],
|
||||
detail=False,
|
||||
url_path='get_user_permissions',
|
||||
url_name='get_user_permissions',
|
||||
name='get_user_permissions'
|
||||
)
|
||||
@transaction.atomic
|
||||
def get_user_permissions(self, request):
|
||||
pass
|
||||
|
||||
|
||||
class UserRelationViewSet(viewsets.ModelViewSet):
|
||||
""" Crud Operations for User Relations """
|
||||
|
||||
queryset = UserRelations.objects.all()
|
||||
serializer_class = UserRelationSerializer
|
||||
|
||||
|
||||
@@ -1,14 +1,26 @@
|
||||
import typing
|
||||
|
||||
from rest_framework import serializers
|
||||
from apps.authorization.models import (
|
||||
Role,
|
||||
Permissions,
|
||||
UserRelations
|
||||
UserRelations,
|
||||
Page
|
||||
)
|
||||
from apps.authentication.api.v1.serializers import serializer as auth_serializer
|
||||
from apps.authentication.models import Organization
|
||||
import itertools
|
||||
|
||||
|
||||
class PageSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Page
|
||||
fields = [
|
||||
'name',
|
||||
'code'
|
||||
]
|
||||
|
||||
|
||||
class PermissionSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Permissions
|
||||
@@ -26,6 +38,18 @@ class PermissionSerializer(serializers.ModelSerializer):
|
||||
|
||||
return representation
|
||||
|
||||
@classmethod
|
||||
def permissions_structure_output(cls, permissions: list) -> typing.Any:
|
||||
""" set a structure for permissions """
|
||||
structure = {}
|
||||
for permission in permissions:
|
||||
if permission.page.name not in structure.keys():
|
||||
structure.update(
|
||||
{f'{permission.page.name}': itertools.chain(*list(
|
||||
permission.page.permission_page.all().values_list('name')))
|
||||
})
|
||||
return structure
|
||||
|
||||
|
||||
class RoleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
@@ -49,15 +73,7 @@ class RoleSerializer(serializers.ModelSerializer):
|
||||
representation['type'] = auth_serializer.OrganizationTypeSerializer(instance.type).data
|
||||
if instance.permissions: # noqa
|
||||
permissions = instance.permissions.all()
|
||||
pages = {}
|
||||
for permission in permissions:
|
||||
if permission.page.name not in pages.keys():
|
||||
pages.update({
|
||||
f'{permission.page.name}': itertools.chain(*list(
|
||||
(permission.page.permission_page.all().values_list('name'))
|
||||
))
|
||||
})
|
||||
representation['permissions'] = pages
|
||||
representation['permissions'] = PermissionSerializer().permissions_structure_output(permissions)
|
||||
return representation
|
||||
|
||||
|
||||
@@ -73,6 +89,7 @@ class UserRelationSerializer(serializers.ModelSerializer):
|
||||
]
|
||||
|
||||
def to_representation(self, instance):
|
||||
""" custom output for serializer """
|
||||
representation = super().to_representation(instance)
|
||||
if isinstance(instance, UserRelations):
|
||||
if instance.user:
|
||||
@@ -81,18 +98,11 @@ class UserRelationSerializer(serializers.ModelSerializer):
|
||||
representation['organization'] = auth_serializer.OrganizationSerializer(instance.organization).data
|
||||
if instance.role:
|
||||
representation['role'] = RoleSerializer(instance.role).data
|
||||
if instance.permissions:
|
||||
if instance.permissions: # noqa
|
||||
# set permissions by a default structure like:
|
||||
# 'page permission':[element permissions]
|
||||
permissions = instance.permissions.all()
|
||||
pages = {}
|
||||
for permission in permissions:
|
||||
if permission.page.name not in pages.keys():
|
||||
pages.update({
|
||||
f'{permission.page.name}': itertools.chain(*list(
|
||||
(permission.page.permission_page.all().values_list('name'))
|
||||
))
|
||||
})
|
||||
representation['permissions'] = pages
|
||||
|
||||
representation['permissions'] = PermissionSerializer().permissions_structure_output(permissions)
|
||||
return representation
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
@@ -100,9 +110,9 @@ class UserRelationSerializer(serializers.ModelSerializer):
|
||||
if validated_data.get('role'):
|
||||
instance.role = Role.objects.get(id=validated_data.get('role', instance.role))
|
||||
if validated_data.get('organization'):
|
||||
instance.organization = Organization.objects.get(id=validated_data.get(
|
||||
'organization', instance.organization
|
||||
))
|
||||
instance.organization = Organization.objects.get(
|
||||
id=validated_data.get('organization', instance.organization)
|
||||
)
|
||||
instance.save()
|
||||
instance.permissions.clear()
|
||||
instance.permissions.add(*(validated_data.get('permissions', instance.permissions)))
|
||||
|
||||
@@ -3,7 +3,8 @@ from django.urls import path, include
|
||||
from .api import (
|
||||
RoleViewSet,
|
||||
PermissionViewSet,
|
||||
UserRelationViewSet
|
||||
UserRelationViewSet,
|
||||
PageViewSet
|
||||
)
|
||||
|
||||
router = DefaultRouter() # set router
|
||||
@@ -12,6 +13,7 @@ router = DefaultRouter() # set router
|
||||
router.register(r'role', RoleViewSet, basename='role')
|
||||
router.register(r'permission', PermissionViewSet, basename='permission')
|
||||
router.register(r'user-relations', UserRelationViewSet, basename='organization-role')
|
||||
router.register(r'page', PageViewSet, basename='page')
|
||||
|
||||
urlpatterns = [
|
||||
path('', include(router.urls))
|
||||
|
||||
Reference in New Issue
Block a user