Skip to content

Commit c6f6b8d

Browse files
Added permssion
1 parent a25414c commit c6f6b8d

File tree

2 files changed

+42
-6
lines changed

2 files changed

+42
-6
lines changed

nxtbn/users/admin_mutation.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
import graphene
22
from django.contrib.auth import authenticate
3+
from django.contrib.auth.models import Permission
34

45
from django.conf import settings
56

7+
from nxtbn.users.admin_types import PermissionType
68
from nxtbn.users.api.storefront.serializers import JwtBasicUserSerializer
9+
from nxtbn.users.models import User
710
from nxtbn.users.utils.jwt_utils import JWTManager
811

912
class AdminTokenType(graphene.ObjectType):
@@ -105,9 +108,38 @@ def mutate(self, info, refresh_token):
105108
return AdminTokenRefreshMutation(refresh=response)
106109
else:
107110
raise Exception("Invalid or expired refresh token")
111+
112+
113+
114+
115+
class AttachPermissionMutation(graphene.Mutation):
116+
class Arguments:
117+
user_id = graphene.Int(required=True)
118+
permission_codename = graphene.String(required=True)
119+
120+
success = graphene.Boolean()
121+
message = graphene.String()
122+
123+
def mutate(self, info, user_id, permission_codename):
124+
try:
125+
user = User.objects.get(id=user_id)
126+
except User.DoesNotExist:
127+
return AttachPermissionMutation(success=False, message="User not found")
128+
129+
try:
130+
permission = Permission.objects.get(codename=permission_codename)
131+
except Permission.DoesNotExist:
132+
return AttachPermissionMutation(success=False, message="Permission not found")
133+
134+
# Add the permission to the user
135+
user.user_permissions.add(permission)
136+
137+
return AttachPermissionMutation(success=True, message="Permission assigned successfully")
138+
108139

109140
class AdminUserMutation(graphene.ObjectType):
110141
login = AdminLoginMutation.Field()
111142
refresh_token = AdminTokenRefreshMutation.Field()
143+
attach_permission = AttachPermissionMutation.Field()
112144

113145

nxtbn/users/admin_queries.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,23 @@ class UserAdminQuery(graphene.ObjectType):
1212
def resolve_permissions(self, info, user_id):
1313
# Get the user by the provided user_id
1414
try:
15-
user = User.objects.get(id=user_id)
15+
user = User.objects.prefetch_related('user_permissions').get(id=user_id)
1616
except User.DoesNotExist:
1717
return [] # If the user doesn't exist, return an empty list
1818

1919
# Retrieve all permissions from the database
2020
permissions = Permission.objects.all()
2121

22+
# Create a set of user's permissions for quick lookup
23+
user_permissions = set(user.user_permissions.all())
24+
2225
# Create a list of PermissionType objects with the user permission check
23-
permission_data = []
24-
for permission in permissions:
25-
permission_data.append(PermissionType(
26+
permission_data = [
27+
PermissionType(
2628
codename=permission.codename,
2729
name=permission.name,
28-
has_assigned=user.has_perm(f'{permission.codename}') # Check if the user has the permission
29-
))
30+
has_assigned=permission in user_permissions # Check if the user has the permission
31+
)
32+
for permission in permissions
33+
]
3034
return permission_data

0 commit comments

Comments
 (0)