Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

# 

# 

# WARNING: don't merge this in utils, you would have cyclic imports errors 

# 

# 

 

 

from enum import IntEnum 

 

from django.conf import settings 

 

from backend_app.settings.defaults import OBJ_MODERATION_PERMISSIONS 

from backend_app.utils import get_user_level 

 

 

class ModerationLevels(IntEnum): 

NO_MODERATION = 0 

DEPENDING_ON_SITE_SETTINGS = 1 

ENFORCED = 2 

 

 

def is_moderation_required(model, obj_in_db, user, user_level=None) -> bool: 

""" 

Function to tell if moderation is required for obj instance given a user. 

 

If obj_in_db is None, it means that the obj hasn't been created yet. 

""" 

 

# 0: check that we are giving the function correct parameters 

if obj_in_db is not None: 

assert type(obj_in_db) == model 

 

# First we retrieve the model moderation level 

model_moderation_level = model.moderation_level 

 

if model_moderation_level == ModerationLevels.NO_MODERATION: 

return False 

 

if user_level is None: 

user_level = get_user_level(user) 

 

# At this point we have to check the obj_moderation_level 

if obj_in_db is not None: 

obj_moderation_level = obj_in_db.obj_moderation_level 

if user_level < obj_moderation_level: 

return True 

 

if model_moderation_level == ModerationLevels.DEPENDING_ON_SITE_SETTINGS: 

if settings.MODERATION_ACTIVATED: 

return not user_level >= OBJ_MODERATION_PERMISSIONS["moderator"] 

else: 

return False 

elif model_moderation_level == ModerationLevels.ENFORCED: 

return not user_level >= OBJ_MODERATION_PERMISSIONS["moderator"] 

else: 

raise Exception( 

"No other moderation level should be defined...: {}".format( 

model_moderation_level 

) 

)