role childs service add to BaseViewSet
This commit is contained in:
@@ -25,7 +25,7 @@ from apps.core.mixins.search_mixin import DynamicSearchMixin
|
||||
from apps.core.mixins.soft_delete_mixin import SoftDeleteMixin
|
||||
|
||||
|
||||
class RoleViewSet(SoftDeleteMixin, viewsets.ModelViewSet):
|
||||
class RoleViewSet(BaseViewSet, SoftDeleteMixin, viewsets.ModelViewSet):
|
||||
""" Crud Operations For User Roles """
|
||||
|
||||
queryset = Role.objects.all()
|
||||
@@ -33,6 +33,14 @@ class RoleViewSet(SoftDeleteMixin, viewsets.ModelViewSet):
|
||||
filter_backends = [filters.SearchFilter]
|
||||
search_fields = ['role_name', 'type__name']
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
""" all roles """
|
||||
|
||||
role = self.paginate_queryset(self.get_queryset().order_by('-modify_date'))
|
||||
if role is not None: # noqa
|
||||
serializer = self.get_serializer(role, many=True)
|
||||
return self.get_paginated_response(serializer.data)
|
||||
|
||||
|
||||
class PageViewSet(SoftDeleteMixin, viewsets.ModelViewSet):
|
||||
""" add website pages to system to set permission on it """
|
||||
|
||||
15
apps/authorization/services/role_child.py
Normal file
15
apps/authorization/services/role_child.py
Normal file
@@ -0,0 +1,15 @@
|
||||
import typing
|
||||
|
||||
from apps.authorization.models import Role
|
||||
|
||||
|
||||
def get_all_role_child(role: Role = None) -> typing.Any:
|
||||
"""
|
||||
get all child of an role
|
||||
"""
|
||||
descendants = []
|
||||
children = role.child.all()
|
||||
for child in children:
|
||||
descendants.append(child)
|
||||
descendants.extend(get_all_org_child(child))
|
||||
return descendants
|
||||
@@ -2,6 +2,7 @@ from rest_framework import viewsets
|
||||
|
||||
from apps.authentication.mixins.region_filter import RegionFilterMixin, get_organization_by_user
|
||||
from apps.authentication.services.service import get_all_org_child
|
||||
from apps.authorization.services.role_child import get_all_role_child
|
||||
from apps.core.models import MobileTest, SystemConfig
|
||||
from apps.core.serializers import MobileTestSerializer, SystemConfigSerializer
|
||||
|
||||
@@ -23,7 +24,8 @@ class BaseViewSet(RegionFilterMixin, viewsets.ModelViewSet):
|
||||
queryset = self.filter_by_region(queryset, org=True)
|
||||
|
||||
if user_relation.exists():
|
||||
if not user_relation.first().role.type.key == 'ADM':
|
||||
user_relation = user_relation.first()
|
||||
if not user_relation.role.type.key == 'ADM':
|
||||
# get all child orgs
|
||||
child_orgs = get_all_org_child(org)
|
||||
|
||||
@@ -35,6 +37,9 @@ class BaseViewSet(RegionFilterMixin, viewsets.ModelViewSet):
|
||||
elif model_name == 'organization':
|
||||
queryset = queryset.filter(id__in=[org.id for org in child_orgs])
|
||||
|
||||
elif model_name == 'role':
|
||||
queryset = queryset.filter(id__in=[role.id for role in get_all_role_child(user_relation.role)])
|
||||
|
||||
return queryset
|
||||
|
||||
|
||||
|
||||
@@ -280,3 +280,7 @@ django.core.exceptions.FieldError: Unsupported lookup 'name' for ForeignKey or j
|
||||
[2025-10-28 09:08:01,206] INFO django.utils.autoreload | IP: - | Path: - | Watching for file changes with StatReloader
|
||||
[2025-10-28 09:15:25,146] INFO django.utils.autoreload | IP: - | Path: - | D:\Project\Rasaddam_Backend\apps\authorization\api\v1\serializers.py changed, reloading.
|
||||
[2025-10-28 09:15:27,109] INFO django.utils.autoreload | IP: - | Path: - | Watching for file changes with StatReloader
|
||||
[2025-10-28 09:32:41,931] INFO django.utils.autoreload | IP: - | Path: - | D:\Project\Rasaddam_Backend\apps\authorization\api\v1\api.py changed, reloading.
|
||||
[2025-10-28 09:32:44,094] INFO django.utils.autoreload | IP: - | Path: - | Watching for file changes with StatReloader
|
||||
[2025-10-28 09:38:33,191] INFO django.utils.autoreload | IP: - | Path: - | D:\Project\Rasaddam_Backend\apps\core\api.py changed, reloading.
|
||||
[2025-10-28 09:38:36,690] INFO django.utils.autoreload | IP: - | Path: - | Watching for file changes with StatReloader
|
||||
|
||||
Reference in New Issue
Block a user