api/permissions.py (32 lines of code) (raw):

from django.contrib.auth.models import AnonymousUser, User from rest_framework import permissions from rest_framework.request import Request from rest_framework.views import APIView from waffle import flag_is_active READ_METHODS = ["GET", "HEAD"] class IsOwner(permissions.BasePermission): def has_object_permission(self, request, view, obj): return obj.user == request.user class HasPremium(permissions.BasePermission): def has_permission(self, request: Request, view: APIView) -> bool: if isinstance(request.user, AnonymousUser): return False if not isinstance(request.user, User): raise ValueError("request.user is not a django.contrib.auth User") if request.method in READ_METHODS: return True return request.user.profile.has_premium class HasPhoneService(permissions.BasePermission): def has_permission(self, request: Request, view: APIView) -> bool: if isinstance(request.user, AnonymousUser): return False if not isinstance(request.user, User): raise ValueError("request.user is not a django.contrib.auth User") if request.method in READ_METHODS: return True return request.user.profile.has_phone class CanManageFlags(permissions.BasePermission): def has_permission(self, request, view): return flag_is_active(request, "manage_flags") and request.user.email.endswith( "@mozilla.com" )