Skip to content

Commit 478d822

Browse files
Merge pull request #385 from MySecondLanguage/make-user-data-protected
Make user data protected
2 parents bd5fb9d + 2b2491b commit 478d822

File tree

4 files changed

+17
-11
lines changed

4 files changed

+17
-11
lines changed

nxtbn/users/admin_mutation.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from django.conf import settings
66
from graphql import GraphQLError
77

8+
from nxtbn.core.admin_permissions import gql_store_admin_required
89
from nxtbn.users.admin_types import PermissionType
910
from nxtbn.users.api.storefront.serializers import JwtBasicUserSerializer
1011
from nxtbn.users.models import User
@@ -121,11 +122,19 @@ class Arguments:
121122
success = graphene.Boolean()
122123
message = graphene.String()
123124

125+
@gql_store_admin_required
124126
def mutate(self, info, user_id, permission_codename):
125127
try:
126128
user = User.objects.get(id=user_id)
127129
except User.DoesNotExist:
128130
return TogglePermissionMutation(success=False, message="User not found")
131+
132+
133+
if user.is_superuser or user.is_store_admin:
134+
raise GraphQLError("Superusers and store administrators have all permissions by default and their permissions cannot be modified.")
135+
136+
if not user.is_active or not user.is_staff:
137+
raise GraphQLError("User is not an active staff member.")
129138

130139
try:
131140
permission = Permission.objects.get(codename=permission_codename)

nxtbn/users/admin_queries.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
class UserAdminQuery(graphene.ObjectType):
1111
users = DjangoFilterConnectionField(AdminUserType)
1212
user = graphene.Field(AdminUserType, id=graphene.Int(required=True))
13-
permissions = graphene.List(PermissionType, user_id=graphene.Int(required=True))
13+
permissions = graphene.List(PermissionType, search=graphene.String(required=True), user_id=graphene.Int(required=True))
1414

1515
def resolve_users(self, info, **kwargs):
16-
return User.objects.all()
16+
return User.objects.filter(is_staff=True)
1717

1818
def resolve_user(self, info, id):
1919
try:
@@ -23,15 +23,15 @@ def resolve_user(self, info, id):
2323

2424
return user
2525

26-
def resolve_permissions(self, info, user_id):
26+
def resolve_permissions(self, info, search, user_id):
2727
# Get the user by the provided user_id
2828
try:
2929
user = User.objects.prefetch_related('user_permissions').get(id=user_id)
3030
except User.DoesNotExist:
3131
return [] # If the user doesn't exist, return an empty list
3232

3333
# Retrieve all permissions from the database
34-
permissions = Permission.objects.all()
34+
permissions = Permission.objects.filter(name__icontains=search)
3535

3636
# Create a set of user's permissions for quick lookup
3737
user_permissions = set(user.user_permissions.all())

nxtbn/users/api/dashboard/serializers.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,7 @@ class Meta:
119119
'password',
120120
'role'
121121
]
122-
extra_kwargs = {
123-
'is_staff': {'read_only': True},
124-
'is_superuser': {'read_only': True},
125-
'username': {'read_only': True}
126-
127-
}
122+
read_only_fields = ['id', 'is_superuser', 'is_staff', 'is_active', 'role', 'username']
128123

129124
def create(self, validated_data):
130125
password = validated_data.pop('password', None)

nxtbn/users/api/dashboard/views.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,9 @@ def get_serializer_class(self):
258258
return UserMututionalSerializer
259259

260260
def get_queryset(self):
261-
return User.objects.exclude(role=UserRole.CUSTOMER)
261+
return User.objects.filter(
262+
is_staff=True,
263+
)
262264

263265
@action(detail=True, methods=['put'])
264266
def deactivate(self, request, pk=None):

0 commit comments

Comments
 (0)