Skip to content

Commit 639b143

Browse files
authored
Merge pull request #94 from silverlogic/BA-1337-permissions-endpoint
BA-1337: Add permission endpoint for checking current user permissions
2 parents 52e94bc + 9914d98 commit 639b143

File tree

3 files changed

+44
-0
lines changed

3 files changed

+44
-0
lines changed

baseapp-auth/baseapp_auth/rest_framework/users/serializers.py

+4
Original file line numberDiff line numberDiff line change
@@ -137,3 +137,7 @@ def update(self, instance, validated_data):
137137
instance.is_email_verified = True
138138
instance.save()
139139
return instance
140+
141+
142+
class UserPermissionSerializer(serializers.Serializer):
143+
perm = serializers.CharField(required=True)

baseapp-auth/baseapp_auth/rest_framework/users/views.py

+13
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from .serializers import (
1919
ChangePasswordSerializer,
2020
ConfirmEmailSerializer,
21+
UserPermissionSerializer,
2122
UserSerializer,
2223
)
2324

@@ -99,3 +100,15 @@ def delete_account(self, request):
99100
else:
100101
user.delete()
101102
return response.Response(data={}, status=status.HTTP_204_NO_CONTENT)
103+
104+
@action(detail=False, methods=["get", "post"], serializer_class=UserPermissionSerializer)
105+
def permissions(self, request):
106+
user = request.user
107+
if request.method == "GET":
108+
permissions = user.get_all_permissions()
109+
return response.Response({"permissions": permissions})
110+
111+
serializer = self.get_serializer(data=request.data)
112+
serializer.is_valid(raise_exception=True)
113+
114+
return response.Response({"has_perm": user.has_perm(serializer.data["perm"])})

baseapp-auth/baseapp_auth/tests/integration/test_users.py

+27
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from baseapp_referrals.utils import get_referral_code
1313
from django.conf import settings
1414
from django.contrib.auth import get_user_model
15+
from django.contrib.auth.models import Permission
1516
from django.utils import timezone
1617

1718
User = get_user_model()
@@ -294,3 +295,29 @@ def test_confirm_email_invalid_token(self, client, data):
294295
def test_confirm_email_no_user(self, client, data):
295296
r = client.post(self.reverse(kwargs={"pk": self.user.pk + 1}), data)
296297
h.responseBadRequest(r)
298+
299+
300+
class TestUserPermission(ApiMixin):
301+
view_name = "users-permissions"
302+
303+
def test_can_get_their_permission(self, user_client):
304+
perm = Permission.objects.create(codename="test_perm", name="Test", content_type_id=1)
305+
user_client.user.user_permissions.add(perm)
306+
r = user_client.get(self.reverse())
307+
h.responseOk(r)
308+
309+
def test_guest_cannot_get_permission(self, client):
310+
r = client.get(self.reverse())
311+
h.responseUnauthorized(r)
312+
313+
def test_user_can_check_their_permission(self, user_client):
314+
perm = Permission.objects.create(codename="test_perm", name="Test", content_type_id=1)
315+
user_client.user.user_permissions.add(perm)
316+
r = user_client.post(self.reverse(), {"perm": "admin.test_perm"})
317+
h.responseOk(r)
318+
assert r.data["has_perm"]
319+
320+
def test_user_get_false_without_permission(self, user_client):
321+
r = user_client.post(self.reverse(), {"perm": "admin.test_perm"})
322+
h.responseOk(r)
323+
assert not r.data["has_perm"]

0 commit comments

Comments
 (0)