oncall-engine/engine/apps/api/views/team.py
Ildar Iskhakov d5079d9ffc
Add rbac to teams endpoint (#1592)
# What this PR does

## Which issue(s) this PR fixes

## Checklist

- [ ] Tests updated
- [ ] Documentation added
- [ ] `CHANGELOG.md` updated
2023-03-22 15:25:30 +08:00

39 lines
1.6 KiB
Python

from rest_framework import mixins, viewsets
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from apps.api.permissions import RBACPermission
from apps.api.serializers.team import TeamSerializer
from apps.auth_token.auth import PluginAuthentication
from apps.mobile_app.auth import MobileAppAuthTokenAuthentication
from apps.user_management.models import Team
from common.api_helpers.mixins import PublicPrimaryKeyMixin
class TeamViewSet(PublicPrimaryKeyMixin, mixins.ListModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):
authentication_classes = (
MobileAppAuthTokenAuthentication,
PluginAuthentication,
)
permission_classes = (IsAuthenticated, RBACPermission)
rbac_permissions = {
"list": [RBACPermission.Permissions.OTHER_SETTINGS_READ],
"retrieve": [RBACPermission.Permissions.OTHER_SETTINGS_READ],
"update": [RBACPermission.Permissions.OTHER_SETTINGS_WRITE],
}
serializer_class = TeamSerializer
def get_queryset(self):
return self.request.user.available_teams
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
general_team = Team(public_primary_key="null", name="No team", email=None, avatar_url=None)
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer([general_team] + list(page), many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer([general_team] + list(queryset), many=True)
return Response(serializer.data)