99 Permission ,
1010)
1111from geonature .core .gn_commons .models import TModules
12+ from gn_module_monitoring .monitoring .models import TMonitoringModules
1213
14+ from geonature .tests .fixtures import users
1315from pypnusershub .db .models import User
1416from pypnusershub .db .models import (
1517 User ,
2022)
2123
2224
23- @pytest .fixture (scope = "session" )
24- def monitorings_users (app ):
25- app = db .session .execute (
26- select (Application ).where (Application .code_application == "GN" )
27- ).scalar_one ()
28- profil = db .session .execute (select (Profil ).where (Profil .nom_profil == "Lecteur" )).scalar_one ()
25+ def add_user_permission (module_code , user , scope , type_code_object , code_action = "CRUVED" ):
26+ """
27+ Add permissions to a user in a module.
2928
30- modules = db .session .scalars (select (TModules )).all ()
29+ Parameters
30+ ----------
31+ module_code : str
32+ Code of the module to add the permission to.
33+ user : User
34+ User to add the permission to.
35+ scope : int
36+ Scope value for the permission.
37+ type_code_object : str
38+ Type of the object to add the permission to.
39+ code_action : str, optional
40+ Code of the action to add the permission for. Default is "CRUVED".
3141
42+ Notes
43+ -----
44+ The function will add the permission to the specified module and object with the given scope.
45+ If the scope is 3, the scope_value will be set to None.
46+ """
47+ module = db .session .execute (
48+ select (TModules ).where (TModules .module_code == module_code )
49+ ).scalar_one ()
3250 actions = {
3351 code : db .session .execute (
3452 select (PermAction ).where (PermAction .code_action == code )
3553 ).scalar_one ()
36- for code in "CRUVED"
54+ for code in code_action
3755 }
56+ with db .session .begin_nested ():
57+ if scope > 0 :
58+ object_all = db .session .scalars (
59+ select (PermObject ).where (PermObject .code_object == type_code_object )
60+ ).all ()
61+ for action in actions .values ():
62+ for obj in object_all + module .objects :
63+ permission = Permission (
64+ role = user ,
65+ action = action ,
66+ module = module ,
67+ object = obj ,
68+ scope_value = scope if scope != 3 else None ,
69+ sensitivity_filter = None ,
70+ )
71+ db .session .add (permission )
72+
73+
74+ @pytest .fixture
75+ def monitorings_users (users ):
76+
77+ modules = db .session .scalars (select (TModules )).all ()
78+
3879 type_code_object = [
3980 "MONITORINGS_MODULES" ,
4081 "MONITORINGS_GRP_SITES" ,
@@ -43,60 +84,31 @@ def monitorings_users(app):
4384 "ALL" ,
4485 ]
4586
46- def create_user (username , organisme = None , scope = None , sensitivity_filter = False ):
47- # do not commit directly on current transaction, as we want to rollback all changes at the end of tests
48- with db .session .begin_nested ():
49- user = User (
50- groupe = False ,
51- active = True ,
52- organisme = organisme ,
53- identifiant = username ,
54- password = username ,
55- nom_role = username ,
56- prenom_role = username ,
57- )
58- db .session .add (user )
59- # user must have been commited for user.id_role to be defined
60- with db .session .begin_nested ():
61- # login right
62- right = UserApplicationRight (
63- id_role = user .id_role , id_application = app .id_application , id_profil = profil .id_profil
64- )
65- db .session .add (right )
66- if scope > 0 :
67- for co in type_code_object :
68- object_all = db .session .scalars (
69- select (PermObject ).where (PermObject .code_object == co )
70- ).all ()
71- for action in actions .values ():
72- for module in modules :
73- for obj in object_all + module .objects :
74- permission = Permission (
75- role = user ,
76- action = action ,
77- module = module ,
78- object = obj ,
79- scope_value = scope if scope != 3 else None ,
80- sensitivity_filter = sensitivity_filter ,
81- )
82- db .session .add (permission )
83- return user
87+ def add_monitoring_permissions (user , scope = None , sensitivity_filter = False ):
88+ for code_object in type_code_object :
89+ for module in modules :
90+ add_user_permission (
91+ module .module_code ,
92+ user ,
93+ scope = scope ,
94+ type_code_object = code_object ,
95+ code_action = "CRUVD" ,
96+ )
8497
85- users = {}
98+ return user
8699
87- organisme = Organisme (nom_organisme = "Autre" )
88- db .session .add (organisme )
100+ monitoring_users = {}
89101
90102 users_to_create = [
91- ("noright_user" , organisme , 0 ),
92- ("stranger_user" , None , 2 ),
93- ("associate_user" , organisme , 2 ),
94- ("self_user" , organisme , 1 ),
95- ("user" , organisme , 2 ),
96- ("admin_user" , organisme , 3 ),
103+ ("noright_user" , 0 ),
104+ ("stranger_user" , 2 ),
105+ ("associate_user" , 2 ),
106+ ("self_user" , 1 ),
107+ ("user" , 2 ),
108+ ("admin_user" , 3 ),
97109 ]
98110
99111 for username , * args in users_to_create :
100- users [username ] = create_user ( username , * args )
112+ monitoring_users [username ] = add_monitoring_permissions ( users [ username ] , * args )
101113
102- return users
114+ return monitoring_users
0 commit comments