Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Julien Jerphanion
Rex Dri
Commits
35b8ea0f
Commit
35b8ea0f
authored
Sep 15, 2018
by
Florent Chehab
Browse files
New moderation modulation added
parent
4ef12c45
Changes
9
Hide whitespace changes
Inline
Side-by-side
backend/models/abstract/my_model/myModelSerializer.py
View file @
35b8ea0f
...
...
@@ -111,7 +111,7 @@ class MyModelSerializer(MySerializerWithJSON):
self
.
my_pre_save
()
ct
=
ContentType
.
objects
.
get_for_model
(
self
.
Meta
.
model
)
if
is_moderation_required
(
self
.
get_model_config
()
[
'moderation_level'
]
,
self
.
instance
,
self
.
user
,
self
.
user_level
):
if
is_moderation_required
(
self
.
get_model_config
(),
self
.
instance
,
self
.
user
,
self
.
user_level
):
if
self
.
instance
is
None
:
# we need to create the main model
# Store the user for squashing data in versions models
self
.
validated_data
.
updated_by
=
self
.
user
...
...
backend/permissions/__init__.py
View file @
35b8ea0f
from
.noDeleteIfNotStaff
import
NoDeleteIfNotStaff
# noqa: F401
from
.isOwner
import
IsOwner
# noqa: F401
from
.noDelete
import
NoDelete
# noqa: F401
from
.isStaffOrReadOnly
import
IsStaffOrReadOnly
# noqa: F401
from
.readOnly
import
ReadOnly
# noqa: F401
from
.isDriOrReadOnly
import
IsDriOrReadOnly
# noqa: F401
from
.default_viewset_permissions
import
DEFAULT_VIEWSET_PERMISSIONS
# noqa: F401
from
.obj_moderation_permission
import
OBJ_MODERATION_PERMISSIONS
# noqa: F401
from
.obj_moderation_permission
import
DEFAULT_OBJ_MODERATION_LV
# noqa: F401
from
.__is_moderation_required
import
is_moderation_required
# noqa: F401
try
:
# the two imports are used outside of django
# the try catch is here to prevent the raise of error
from
.noDeleteIfNotStaff
import
NoDeleteIfNotStaff
# noqa: F401
from
.isOwner
import
IsOwner
# noqa: F401
from
.noDelete
import
NoDelete
# noqa: F401
from
.isStaffOrReadOnly
import
IsStaffOrReadOnly
# noqa: F401
from
.readOnly
import
ReadOnly
# noqa: F401
from
.isDriOrReadOnly
import
IsDriOrReadOnly
# noqa: F401
from
.default_viewset_permissions
import
DEFAULT_VIEWSET_PERMISSIONS
# noqa: F401
from
.__is_moderation_required
import
is_moderation_required
# noqa: F401
except
Exception
:
pass
backend/permissions/__is_moderation_required.py
View file @
35b8ea0f
...
...
@@ -12,10 +12,17 @@ from .obj_moderation_permission import OBJ_MODERATION_PERMISSIONS
######################################
######################################
def
is_moderation_required
(
model_moderation_level
,
obj_in_db
,
user
,
user_level
=
None
):
def
is_moderation_required
(
model_config
,
obj_in_db
,
user
,
user_level
=
None
):
model_moderation_level
=
model_config
[
'moderation_level'
]
if
user_level
is
None
:
user_level
=
get_user_level
(
user
)
key
=
'enforce_moderation_user_level'
if
key
in
model_config
.
keys
()
and
model_config
[
key
]
is
not
None
:
if
user_level
<
model_config
[
key
]:
return
True
if
model_moderation_level
==
0
:
return
False
else
:
...
...
backend/tests/test_is_moderation_required.py
View file @
35b8ea0f
...
...
@@ -2,15 +2,21 @@ from django.test import override_settings
from
.withUserTestCase
import
WithUserTestCase
from
backend.permissions
import
is_moderation_required
model_config
=
{
'moderation_level'
:
2
}
class
IsModerationActivatedTestCase
(
WithUserTestCase
):
@
override_settings
(
MODERATION_ACTIVATED
=
True
)
def
test_is_moderation_1
(
self
):
self
.
assertFalse
(
is_moderation_required
(
2
,
None
,
self
.
staff_user
))
self
.
assertFalse
(
is_moderation_required
(
2
,
None
,
self
.
staff_user
,
3
))
self
.
assertFalse
(
is_moderation_required
(
model_config
,
None
,
self
.
staff_user
))
self
.
assertFalse
(
is_moderation_required
(
model_config
,
None
,
self
.
staff_user
,
3
))
@
override_settings
(
MODERATION_ACTIVATED
=
False
)
def
test_is_moderation_2
(
self
):
self
.
assertFalse
(
is_moderation_required
(
2
,
None
,
self
.
staff_user
))
self
.
assertFalse
(
is_moderation_required
(
2
,
None
,
self
.
staff_user
,
3
))
self
.
assertFalse
(
is_moderation_required
(
model_config
,
None
,
self
.
staff_user
))
self
.
assertFalse
(
is_moderation_required
(
model_config
,
None
,
self
.
staff_user
,
3
))
backend/utils/__get_model_config.py
View file @
35b8ea0f
...
...
@@ -6,10 +6,14 @@ def get_model_config(model):
for
obj
in
api_config
:
if
obj
[
'model'
]
==
model
:
return
{
tmp
=
{
"moderation_level"
:
obj
[
"moderation_level"
],
"model"
:
model
,
"read_only"
:
obj
[
"read_only"
]
}
key
=
'enforce_moderation_user_level'
if
key
in
obj
.
keys
():
tmp
[
key
]
=
obj
[
key
]
return
tmp
raise
Exception
(
"Model not found in API configuraiton, cannot process !"
)
frontend/src/components/university/shared/GenericModule.js
View file @
35b8ea0f
...
...
@@ -189,7 +189,7 @@ class GenericModule extends MyComponent {
return
!
isModerationRequired
(
serverModerationStatus
.
activated
,
serverModerationStatus
.
moderator_level
,
rawModelData
.
model_config
.
moderation_level
,
rawModelData
.
model_config
,
rawModelData
.
obj_moderation_level
,
userData
.
owner_level
)
...
...
frontend/src/utils/isModerationRequired.js
View file @
35b8ea0f
...
...
@@ -10,9 +10,16 @@
export
default
function
isModerationRequired
(
moderationActivated
,
moderatorLevel
,
model
ModerationLevel
,
model
Config
,
objModerationLevel
,
userLevel
)
{
const
{
modelModerationLevel
}
=
modelConfig
;
const
key
=
'
enforce_moderation_user_level
'
;
if
(
key
in
modelConfig
&&
userLevel
<
modelConfig
[
key
])
{
return
true
;
}
if
(
modelModerationLevel
==
0
)
{
return
false
;
}
else
{
...
...
general/api/api_config.yml
View file @
35b8ea0f
...
...
@@ -133,7 +133,7 @@
import_location
:
country
api_end_point
:
countryDri
api_attr
:
(?P<country_id>[a-zA-Z]+)
viewset_permission
:
IsDriOrReadOnly
enforce_moderation_user_level
:
'
DRI'
versionned
:
true
...
...
@@ -178,7 +178,7 @@
import_location
:
university
api_end_point
:
universityDri
api_attr
:
(?P<univ_id>[0-9]+)
viewset_permission
:
IsDriOrReadOnly
enforce_moderation_user_level
:
'
DRI'
versionned
:
true
...
...
general/api/get_api_config.py
View file @
35b8ea0f
import
yaml
from
os.path
import
join
,
realpath
,
dirname
from
backend.permissions.obj_moderation_permission
import
OBJ_MODERATION_PERMISSIONS
def
get_api_config
():
...
...
@@ -18,6 +19,9 @@ def get_api_config():
}
for
obj
in
api_config
:
tmp
=
'enforce_moderation_user_level'
if
tmp
in
obj
.
keys
():
obj
[
tmp
]
=
OBJ_MODERATION_PERMISSIONS
[
obj
[
tmp
]]
for
key
in
DEFAULT_SETTINGS
:
if
key
not
in
obj
:
obj
[
key
]
=
DEFAULT_SETTINGS
[
key
]
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment