1
1
# -*- coding: utf-8 -*-
2
2
#
3
- # Copyright (C) 2022 KTH Royal Institute of Technology
3
+ # Copyright (C) 2022-2024 KTH Royal Institute of Technology.
4
4
# Copyright (C) 2022 TU Wien.
5
5
# Copyright (C) 2022 European Union.
6
6
# Copyright (C) 2022 CERN.
@@ -129,15 +129,20 @@ def rebuild_index(self, identity, uow=None):
129
129
self .indexer .bulk_index ([u .id for u in users ])
130
130
return True
131
131
132
+ def _check_permission (self , identity , permission_type , user ):
133
+ """Checks if given identity has the specified permission type on the user."""
134
+ self .require_permission (
135
+ identity , permission_type , record = user , actor_id = identity .id
136
+ )
137
+
132
138
@unit_of_work ()
133
139
def block (self , identity , id_ , uow = None ):
134
140
"""Blocks a user."""
135
141
user = UserAggregate .get_record (id_ )
136
142
if user is None :
137
143
# return 403 even on empty resource due to security implications
138
144
raise PermissionDeniedError ()
139
-
140
- self .require_permission (identity , "manage" , record = user )
145
+ self ._check_permission (identity , "manage" , user )
141
146
142
147
if user .blocked :
143
148
raise ValidationError ("User is already blocked." )
@@ -160,8 +165,7 @@ def restore(self, identity, id_, uow=None):
160
165
if user is None :
161
166
# return 403 even on empty resource due to security implications
162
167
raise PermissionDeniedError ()
163
-
164
- self .require_permission (identity , "manage" , record = user )
168
+ self ._check_permission (identity , "manage" , user )
165
169
166
170
if not user .blocked :
167
171
raise ValidationError ("User is not blocked." )
@@ -185,8 +189,7 @@ def approve(self, identity, id_, uow=None):
185
189
if user is None :
186
190
# return 403 even on empty resource due to security implications
187
191
raise PermissionDeniedError ()
188
-
189
- self .require_permission (identity , "manage" , record = user )
192
+ self ._check_permission (identity , "manage" , user )
190
193
191
194
if user .verified :
192
195
raise ValidationError ("User is already verified." )
@@ -209,7 +212,7 @@ def deactivate(self, identity, id_, uow=None):
209
212
if user is None :
210
213
# return 403 even on empty resource due to security implications
211
214
raise PermissionDeniedError ()
212
- self .require_permission (identity , "manage" , record = user )
215
+ self ._check_permission (identity , "manage" , user )
213
216
214
217
if not user .active :
215
218
raise ValidationError ("User is already inactive." )
@@ -225,7 +228,8 @@ def activate(self, identity, id_, uow=None):
225
228
if user is None :
226
229
# return 403 even on empty resource due to security implications
227
230
raise PermissionDeniedError ()
228
- self .require_permission (identity , "manage" , record = user )
231
+ self ._check_permission (identity , "manage" , user )
232
+
229
233
if user .active and user .confirmed :
230
234
raise ValidationError ("User is already active." )
231
235
user .activate ()
@@ -238,5 +242,6 @@ def can_impersonate(self, identity, id_):
238
242
if user is None :
239
243
# return 403 even on empty resource due to security implications
240
244
raise PermissionDeniedError ()
241
- self .require_permission (identity , "impersonate" , record = user )
245
+ self ._check_permission (identity , "impersonate" , user )
246
+
242
247
return user .model .model_obj
0 commit comments