healthdatalayer 1.0.1__py3-none-any.whl → 1.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of healthdatalayer might be problematic. Click here for more details.
- {healthdatalayer-1.0.1.dist-info → healthdatalayer-1.1.0.dist-info}/METADATA +2 -2
- healthdatalayer-1.1.0.dist-info/RECORD +93 -0
- models/bridge_area_floor_branch/__init__.py +0 -0
- models/bridge_area_floor_branch/area.py +8 -0
- models/bridge_area_floor_branch/branch.py +16 -0
- models/bridge_area_floor_branch/bridge_area_floor_branch.py +27 -0
- models/bridge_area_floor_branch/floor.py +8 -0
- models/bridge_area_floor_branch/room.py +8 -0
- models/bridge_area_floor_branch/system.py +8 -0
- models/client/__init__.py +0 -0
- models/client/address.py +13 -0
- models/client/client.py +25 -0
- models/client/client_type.py +9 -0
- models/client/education.py +9 -0
- models/client/emergency_contact.py +17 -0
- models/client/gender.py +9 -0
- models/client/marriage_status.py +9 -0
- models/client/nationality.py +10 -0
- models/client/pathological_history.py +29 -0
- models/client/pet.py +16 -0
- models/client/profession.py +9 -0
- models/client/px.py +28 -0
- models/collaborator/__init__.py +0 -0
- models/collaborator/collaborator.py +33 -0
- models/collaborator/collaborator_speciality.py +8 -0
- models/collaborator/collaborator_type.py +9 -0
- models/collaborator/speciality.py +23 -0
- models/lab/__init__.py +0 -0
- models/lab/client_lab.py +13 -0
- models/lab/measure_lab.py +11 -0
- models/lab/medical_lab.py +17 -0
- models/medical_visit/__init__.py +0 -0
- models/medical_visit/medical_diagnosis.py +12 -0
- models/medical_visit/medical_diagnosis_visit.py +25 -0
- models/medical_visit/medical_drug.py +27 -0
- models/medical_visit/medical_drug_recipe.py +18 -0
- models/medical_visit/medical_recipe_visit.py +28 -0
- models/medical_visit/medical_visit.py +51 -0
- models/medical_visit/organ_system_review.py +28 -0
- models/medical_visit/physical_exam.py +45 -0
- models/medical_visit/visit_triage.py +28 -0
- models/user/__init__.py +0 -0
- models/user/permission.py +27 -0
- models/user/permission_user.py +8 -0
- models/user/role.py +27 -0
- models/user/role_permission.py +8 -0
- models/user/role_user.py +8 -0
- models/user/user.py +30 -0
- repositories/client_repositories/__init__.py +0 -0
- repositories/client_repositories/address_repository.py +64 -0
- repositories/client_repositories/client_type_repository.py +69 -0
- repositories/client_repositories/education_repository.py +70 -0
- repositories/client_repositories/gender_repository.py +70 -0
- repositories/client_repositories/marriage_status_repository.py +70 -0
- repositories/client_repositories/pet_repository.py +126 -0
- repositories/client_repositories/profession_repository.py +70 -0
- repositories/client_repositories/px_repository.py +210 -0
- repositories/collaborator_repositories/__init__.py +0 -0
- repositories/collaborator_repositories/collaborator_repository.py +150 -0
- repositories/collaborator_repositories/collaborator_type_repository.py +69 -0
- repositories/collaborator_repositories/speciality_repository.py +75 -0
- repositories/infraestructure_repositories/__init__.py +0 -0
- repositories/infraestructure_repositories/area_repository.py +69 -0
- repositories/infraestructure_repositories/branch_repository.py +69 -0
- repositories/infraestructure_repositories/bridge_repository.py +80 -0
- repositories/infraestructure_repositories/floor_repository.py +69 -0
- repositories/infraestructure_repositories/room_repository.py +69 -0
- repositories/infraestructure_repositories/system_repository.py +69 -0
- repositories/lab_repositories/__init__.py +0 -0
- repositories/lab_repositories/measure_lab_repository.py +80 -0
- repositories/lab_repositories/medical_lab_repository.py +254 -0
- repositories/medical_visit_repositories/__init__.py +0 -0
- repositories/medical_visit_repositories/medical_diagnosis_repository.py +63 -0
- repositories/medical_visit_repositories/medical_diagnosis_visit_repository.py +92 -0
- repositories/medical_visit_repositories/medical_drug_recipe_repository.py +70 -0
- repositories/medical_visit_repositories/medical_drug_repository.py +63 -0
- repositories/medical_visit_repositories/medical_recipe_visit_repository.py +93 -0
- repositories/medical_visit_repositories/medical_visit_repository.py +110 -0
- repositories/medical_visit_repositories/organ_system_review_repository.py +89 -0
- repositories/medical_visit_repositories/physical_exam_repository.py +89 -0
- repositories/medical_visit_repositories/visit_triage_repository.py +89 -0
- repositories/user_repositories/__init__.py +0 -0
- repositories/user_repositories/permission_repository.py +238 -0
- repositories/user_repositories/role_repository.py +174 -0
- repositories/user_repositories/user_repository.py +251 -0
- healthdatalayer-1.0.1.dist-info/RECORD +0 -10
- {healthdatalayer-1.0.1.dist-info → healthdatalayer-1.1.0.dist-info}/WHEEL +0 -0
- {healthdatalayer-1.0.1.dist-info → healthdatalayer-1.1.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
from typing import Optional, List
|
|
2
|
+
from uuid import UUID
|
|
3
|
+
from sqlmodel import select
|
|
4
|
+
from sqlalchemy.orm import selectinload
|
|
5
|
+
|
|
6
|
+
from models import Role
|
|
7
|
+
from models import Permission
|
|
8
|
+
from models import User
|
|
9
|
+
from config.db import engines, get_session
|
|
10
|
+
|
|
11
|
+
class RoleRepository:
|
|
12
|
+
def __init__(self, tenant: str):
|
|
13
|
+
self.tenant = tenant
|
|
14
|
+
if tenant not in engines:
|
|
15
|
+
raise ValueError(f"Tenant {tenant} is not configured")
|
|
16
|
+
|
|
17
|
+
def create_command(self, role: Role) -> Role:
|
|
18
|
+
with get_session(self.tenant) as session:
|
|
19
|
+
session.add(role)
|
|
20
|
+
session.commit()
|
|
21
|
+
session.refresh(role)
|
|
22
|
+
return role
|
|
23
|
+
|
|
24
|
+
def get_by_id_command(self, role_id: UUID, load_relations: bool = False) -> Optional[Role]:
|
|
25
|
+
with get_session(self.tenant) as session:
|
|
26
|
+
if load_relations:
|
|
27
|
+
statement = select(Role).where(Role.role_id == role_id).options(
|
|
28
|
+
selectinload(Role.permissions),
|
|
29
|
+
selectinload(Role.users)
|
|
30
|
+
)
|
|
31
|
+
return session.exec(statement).first()
|
|
32
|
+
else:
|
|
33
|
+
return session.get(Role, role_id)
|
|
34
|
+
|
|
35
|
+
def get_by_name_command(self, name: str, load_relations: bool = False) -> Optional[Role]:
|
|
36
|
+
with get_session(self.tenant) as session:
|
|
37
|
+
statement = select(Role).where(Role.name == name)
|
|
38
|
+
|
|
39
|
+
if load_relations:
|
|
40
|
+
statement = statement.options(
|
|
41
|
+
selectinload(Role.permissions),
|
|
42
|
+
selectinload(Role.users)
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
return session.exec(statement).first()
|
|
46
|
+
|
|
47
|
+
def search_by_name_command(self, name: str, load_relations: bool = False) -> List[Role]:
|
|
48
|
+
with get_session(self.tenant) as session:
|
|
49
|
+
statement = select(Role).where(Role.name.ilike(f"%{name}%"))
|
|
50
|
+
|
|
51
|
+
if load_relations:
|
|
52
|
+
statement = statement.options(
|
|
53
|
+
selectinload(Role.permissions),
|
|
54
|
+
selectinload(Role.users)
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
results = session.exec(statement)
|
|
58
|
+
return results.all()
|
|
59
|
+
|
|
60
|
+
def list_all_command(self, active_only: bool = True, load_relations: bool = False) -> List[Role]:
|
|
61
|
+
with get_session(self.tenant) as session:
|
|
62
|
+
statement = select(Role)
|
|
63
|
+
|
|
64
|
+
if active_only:
|
|
65
|
+
statement = statement.where(Role.is_active == True)
|
|
66
|
+
|
|
67
|
+
if load_relations:
|
|
68
|
+
statement = statement.options(
|
|
69
|
+
selectinload(Role.permissions),
|
|
70
|
+
selectinload(Role.users)
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
results = session.exec(statement)
|
|
74
|
+
return results.all()
|
|
75
|
+
|
|
76
|
+
def update_command(self, role: Role) -> Role:
|
|
77
|
+
with get_session(self.tenant) as session:
|
|
78
|
+
db_role = session.merge(role)
|
|
79
|
+
session.commit()
|
|
80
|
+
session.refresh(db_role)
|
|
81
|
+
return db_role
|
|
82
|
+
|
|
83
|
+
def delete_command(self, role_id: UUID, soft_delete: bool = True) -> bool:
|
|
84
|
+
with get_session(self.tenant) as session:
|
|
85
|
+
db_role = session.get(Role, role_id)
|
|
86
|
+
if not db_role:
|
|
87
|
+
return False
|
|
88
|
+
|
|
89
|
+
if soft_delete:
|
|
90
|
+
db_role.is_active = False
|
|
91
|
+
session.add(db_role)
|
|
92
|
+
else:
|
|
93
|
+
session.delete(db_role)
|
|
94
|
+
|
|
95
|
+
session.commit()
|
|
96
|
+
return True
|
|
97
|
+
|
|
98
|
+
def count_command(self, active_only: bool = True) -> int:
|
|
99
|
+
with get_session(self.tenant) as session:
|
|
100
|
+
statement = select(Role)
|
|
101
|
+
if active_only:
|
|
102
|
+
statement = statement.where(Role.is_active == True)
|
|
103
|
+
results = session.exec(statement)
|
|
104
|
+
return len(results.all())
|
|
105
|
+
|
|
106
|
+
def exists_by_name_command(self, name: str) -> bool:
|
|
107
|
+
with get_session(self.tenant) as session:
|
|
108
|
+
statement = select(Role).where(Role.name == name)
|
|
109
|
+
result = session.exec(statement).first()
|
|
110
|
+
return result is not None
|
|
111
|
+
|
|
112
|
+
# RELATIONS COMMANDS
|
|
113
|
+
|
|
114
|
+
def get_role_permissions_command(self, role_id: UUID) -> List[Permission]:
|
|
115
|
+
with get_session(self.tenant) as session:
|
|
116
|
+
statement = select(Role).options(selectinload(Role.permissions)).where(Role.role_id == role_id)
|
|
117
|
+
role = session.exec(statement).first()
|
|
118
|
+
if not role:
|
|
119
|
+
return []
|
|
120
|
+
return role.permissions
|
|
121
|
+
|
|
122
|
+
def get_role_users_command(self, role_id: UUID) -> List[User]:
|
|
123
|
+
with get_session(self.tenant) as session:
|
|
124
|
+
statement = select(Role).options(selectinload(Role.users)).where(Role.role_id == role_id)
|
|
125
|
+
role = session.exec(statement).first()
|
|
126
|
+
if not role:
|
|
127
|
+
return []
|
|
128
|
+
return role.users
|
|
129
|
+
|
|
130
|
+
def assign_permission_command(self, role_id: UUID, permission_id: UUID) -> Optional[Role]:
|
|
131
|
+
with get_session(self.tenant) as session:
|
|
132
|
+
role_statement = select(Role).options(selectinload(Role.permissions)).where(Role.role_id == role_id)
|
|
133
|
+
role = session.exec(role_statement).first()
|
|
134
|
+
if not role:
|
|
135
|
+
return None
|
|
136
|
+
|
|
137
|
+
permission = session.get(Permission, permission_id)
|
|
138
|
+
if not permission:
|
|
139
|
+
return None
|
|
140
|
+
|
|
141
|
+
if permission not in role.permissions:
|
|
142
|
+
role.permissions.append(permission)
|
|
143
|
+
session.add(role)
|
|
144
|
+
session.commit()
|
|
145
|
+
session.refresh(role)
|
|
146
|
+
|
|
147
|
+
return role
|
|
148
|
+
|
|
149
|
+
def remove_permission_command(self, role_id: UUID, permission_id: UUID) -> Optional[Role]:
|
|
150
|
+
with get_session(self.tenant) as session:
|
|
151
|
+
role_statement = select(Role).options(selectinload(Role.permissions)).where(Role.role_id == role_id)
|
|
152
|
+
role = session.exec(role_statement).first()
|
|
153
|
+
if not role:
|
|
154
|
+
return None
|
|
155
|
+
|
|
156
|
+
permission = session.get(Permission, permission_id)
|
|
157
|
+
if not permission:
|
|
158
|
+
return None
|
|
159
|
+
|
|
160
|
+
if permission in role.permissions:
|
|
161
|
+
role.permissions.remove(permission)
|
|
162
|
+
session.add(role)
|
|
163
|
+
session.commit()
|
|
164
|
+
session.refresh(role)
|
|
165
|
+
|
|
166
|
+
return role
|
|
167
|
+
|
|
168
|
+
def has_permission_command(self, role_id: UUID, permission_name: str) -> bool:
|
|
169
|
+
with get_session(self.tenant) as session:
|
|
170
|
+
statement = select(Role).options(selectinload(Role.permissions)).where(Role.role_id == role_id)
|
|
171
|
+
role = session.exec(statement).first()
|
|
172
|
+
if not role:
|
|
173
|
+
return False
|
|
174
|
+
return any(perm.name == permission_name for perm in role.permissions)
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
from typing import Optional, List
|
|
2
|
+
from uuid import UUID
|
|
3
|
+
from sqlmodel import select
|
|
4
|
+
from sqlalchemy.orm import selectinload
|
|
5
|
+
|
|
6
|
+
from models import User
|
|
7
|
+
from models import Role
|
|
8
|
+
from models import Permission
|
|
9
|
+
from config.db import engines, get_session
|
|
10
|
+
|
|
11
|
+
class UserRepository:
|
|
12
|
+
def __init__(self, tenant: str):
|
|
13
|
+
self.tenant = tenant
|
|
14
|
+
if tenant not in engines:
|
|
15
|
+
raise ValueError(f"Tenant {tenant} is not configured")
|
|
16
|
+
|
|
17
|
+
def create_command(self, user: User) -> User:
|
|
18
|
+
with get_session(self.tenant) as session:
|
|
19
|
+
session.add(user)
|
|
20
|
+
session.commit()
|
|
21
|
+
session.refresh(user)
|
|
22
|
+
return user
|
|
23
|
+
|
|
24
|
+
def get_by_id_command(self, user_id: UUID, load_relations: bool = False) -> Optional[User]:
|
|
25
|
+
with get_session(self.tenant) as session:
|
|
26
|
+
if load_relations:
|
|
27
|
+
statement = select(User).where(User.user_id == user_id).options(
|
|
28
|
+
selectinload(User.roles),
|
|
29
|
+
selectinload(User.permissions)
|
|
30
|
+
)
|
|
31
|
+
return session.exec(statement).first()
|
|
32
|
+
else:
|
|
33
|
+
return session.get(User, user_id)
|
|
34
|
+
|
|
35
|
+
def get_by_username_command(self, username: str, load_relations: bool = False) -> Optional[User]:
|
|
36
|
+
with get_session(self.tenant) as session:
|
|
37
|
+
statement = select(User).where(User.username == username)
|
|
38
|
+
|
|
39
|
+
if load_relations:
|
|
40
|
+
statement = statement.options(
|
|
41
|
+
selectinload(User.roles),
|
|
42
|
+
selectinload(User.permissions)
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
return session.exec(statement).first()
|
|
46
|
+
|
|
47
|
+
def get_by_email_command(self, email: str, load_relations: bool = False) -> Optional[User]:
|
|
48
|
+
with get_session(self.tenant) as session:
|
|
49
|
+
statement = select(User).where(User.email == email)
|
|
50
|
+
|
|
51
|
+
if load_relations:
|
|
52
|
+
statement = statement.options(
|
|
53
|
+
selectinload(User.roles),
|
|
54
|
+
selectinload(User.permissions)
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
return session.exec(statement).first()
|
|
58
|
+
|
|
59
|
+
def search_by_username_command(self, username: str, load_relations: bool = False) -> List[User]:
|
|
60
|
+
with get_session(self.tenant) as session:
|
|
61
|
+
statement = select(User).where(User.username.ilike(f"%{username}%"))
|
|
62
|
+
|
|
63
|
+
if load_relations:
|
|
64
|
+
statement = statement.options(
|
|
65
|
+
selectinload(User.roles),
|
|
66
|
+
selectinload(User.permissions)
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
results = session.exec(statement)
|
|
70
|
+
return results.all()
|
|
71
|
+
|
|
72
|
+
def list_all_command(self, active_only: bool = True, load_relations: bool = False) -> List[User]:
|
|
73
|
+
with get_session(self.tenant) as session:
|
|
74
|
+
statement = select(User)
|
|
75
|
+
|
|
76
|
+
if active_only:
|
|
77
|
+
statement = statement.where(User.is_active == True)
|
|
78
|
+
|
|
79
|
+
if load_relations:
|
|
80
|
+
statement = statement.options(
|
|
81
|
+
selectinload(User.roles),
|
|
82
|
+
selectinload(User.permissions)
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
results = session.exec(statement)
|
|
86
|
+
return results.all()
|
|
87
|
+
|
|
88
|
+
def update_command(self, user: User) -> User:
|
|
89
|
+
with get_session(self.tenant) as session:
|
|
90
|
+
db_user = session.merge(user)
|
|
91
|
+
session.commit()
|
|
92
|
+
session.refresh(db_user)
|
|
93
|
+
return db_user
|
|
94
|
+
|
|
95
|
+
def delete_command(self, user_id: UUID, soft_delete: bool = True) -> bool:
|
|
96
|
+
with get_session(self.tenant) as session:
|
|
97
|
+
db_user = session.get(User, user_id)
|
|
98
|
+
if not db_user:
|
|
99
|
+
return False
|
|
100
|
+
|
|
101
|
+
if soft_delete:
|
|
102
|
+
db_user.is_active = False
|
|
103
|
+
session.add(db_user)
|
|
104
|
+
else:
|
|
105
|
+
session.delete(db_user)
|
|
106
|
+
|
|
107
|
+
session.commit()
|
|
108
|
+
return True
|
|
109
|
+
|
|
110
|
+
def count_command(self, active_only: bool = True) -> int:
|
|
111
|
+
with get_session(self.tenant) as session:
|
|
112
|
+
statement = select(User)
|
|
113
|
+
if active_only:
|
|
114
|
+
statement = statement.where(User.is_active == True)
|
|
115
|
+
results = session.exec(statement)
|
|
116
|
+
return len(results.all())
|
|
117
|
+
|
|
118
|
+
def exists_by_username_command(self, username: str) -> bool:
|
|
119
|
+
with get_session(self.tenant) as session:
|
|
120
|
+
statement = select(User).where(User.username == username)
|
|
121
|
+
result = session.exec(statement).first()
|
|
122
|
+
return result is not None
|
|
123
|
+
|
|
124
|
+
def exists_by_email_command(self, email: str) -> bool:
|
|
125
|
+
with get_session(self.tenant) as session:
|
|
126
|
+
statement = select(User).where(User.email == email)
|
|
127
|
+
result = session.exec(statement).first()
|
|
128
|
+
return result is not None
|
|
129
|
+
|
|
130
|
+
def change_password_command(self, user_id: UUID, new_password: str) -> Optional[User]:
|
|
131
|
+
with get_session(self.tenant) as session:
|
|
132
|
+
user = session.get(User, user_id)
|
|
133
|
+
if not user:
|
|
134
|
+
return None
|
|
135
|
+
user.password = new_password
|
|
136
|
+
session.add(user)
|
|
137
|
+
session.commit()
|
|
138
|
+
session.refresh(user)
|
|
139
|
+
return user
|
|
140
|
+
|
|
141
|
+
# ROLES COMANDS
|
|
142
|
+
|
|
143
|
+
def get_user_roles_command(self, user_id: UUID) -> List[Role]:
|
|
144
|
+
with get_session(self.tenant) as session:
|
|
145
|
+
statement = select(User).options(selectinload(User.roles)).where(User.user_id == user_id)
|
|
146
|
+
user = session.exec(statement).first()
|
|
147
|
+
if not user:
|
|
148
|
+
return []
|
|
149
|
+
return user.roles
|
|
150
|
+
|
|
151
|
+
def has_role_command(self, user_id: UUID, role_name: str) -> bool:
|
|
152
|
+
with get_session(self.tenant) as session:
|
|
153
|
+
statement = select(User).options(selectinload(User.roles)).where(User.user_id == user_id)
|
|
154
|
+
user = session.exec(statement).first()
|
|
155
|
+
if not user:
|
|
156
|
+
return False
|
|
157
|
+
return any(role.name == role_name for role in user.roles)
|
|
158
|
+
|
|
159
|
+
def assign_role_command(self, user_id: UUID, role_id: UUID) -> Optional[User]:
|
|
160
|
+
with get_session(self.tenant) as session:
|
|
161
|
+
user_statement = select(User).options(selectinload(User.roles)).where(User.user_id == user_id)
|
|
162
|
+
user = session.exec(user_statement).first()
|
|
163
|
+
if not user:
|
|
164
|
+
return None
|
|
165
|
+
|
|
166
|
+
role = session.get(Role, role_id)
|
|
167
|
+
if not role:
|
|
168
|
+
return None
|
|
169
|
+
|
|
170
|
+
if role not in user.roles:
|
|
171
|
+
user.roles.append(role)
|
|
172
|
+
session.add(user)
|
|
173
|
+
session.commit()
|
|
174
|
+
session.refresh(user)
|
|
175
|
+
|
|
176
|
+
return user
|
|
177
|
+
|
|
178
|
+
def remove_role_command(self, user_id: UUID, role_id: UUID) -> Optional[User]:
|
|
179
|
+
with get_session(self.tenant) as session:
|
|
180
|
+
user_statement = select(User).options(selectinload(User.roles)).where(User.user_id == user_id)
|
|
181
|
+
user = session.exec(user_statement).first()
|
|
182
|
+
if not user:
|
|
183
|
+
return None
|
|
184
|
+
|
|
185
|
+
role = session.get(Role, role_id)
|
|
186
|
+
if not role:
|
|
187
|
+
return None
|
|
188
|
+
|
|
189
|
+
if role in user.roles:
|
|
190
|
+
user.roles.remove(role)
|
|
191
|
+
session.add(user)
|
|
192
|
+
session.commit()
|
|
193
|
+
session.refresh(user)
|
|
194
|
+
|
|
195
|
+
return user
|
|
196
|
+
|
|
197
|
+
# PERMISSIONS COMANDS
|
|
198
|
+
|
|
199
|
+
def get_user_permissions_command(self, user_id: UUID) -> List[Permission]:
|
|
200
|
+
with get_session(self.tenant) as session:
|
|
201
|
+
statement = select(User).options(selectinload(User.permissions)).where(User.user_id == user_id)
|
|
202
|
+
user = session.exec(statement).first()
|
|
203
|
+
if not user:
|
|
204
|
+
return []
|
|
205
|
+
return user.permissions
|
|
206
|
+
|
|
207
|
+
def has_permission_command(self, user_id: UUID, permission_name: str) -> bool:
|
|
208
|
+
with get_session(self.tenant) as session:
|
|
209
|
+
statement = select(User).options(selectinload(User.permissions)).where(User.user_id == user_id)
|
|
210
|
+
user = session.exec(statement).first()
|
|
211
|
+
if not user:
|
|
212
|
+
return False
|
|
213
|
+
return any(perm.name == permission_name for perm in user.permissions)
|
|
214
|
+
|
|
215
|
+
def assign_permission_command(self, user_id: UUID, permission_id: UUID) -> Optional[User]:
|
|
216
|
+
with get_session(self.tenant) as session:
|
|
217
|
+
user_statement = select(User).options(selectinload(User.permissions)).where(User.user_id == user_id)
|
|
218
|
+
user = session.exec(user_statement).first()
|
|
219
|
+
if not user:
|
|
220
|
+
return None
|
|
221
|
+
|
|
222
|
+
permission = session.get(Permission, permission_id)
|
|
223
|
+
if not permission:
|
|
224
|
+
return None
|
|
225
|
+
|
|
226
|
+
if permission not in user.permissions:
|
|
227
|
+
user.permissions.append(permission)
|
|
228
|
+
session.add(user)
|
|
229
|
+
session.commit()
|
|
230
|
+
session.refresh(user)
|
|
231
|
+
|
|
232
|
+
return user
|
|
233
|
+
|
|
234
|
+
def remove_permission_command(self, user_id: UUID, permission_id: UUID) -> Optional[User]:
|
|
235
|
+
with get_session(self.tenant) as session:
|
|
236
|
+
user_statement = select(User).options(selectinload(User.permissions)).where(User.user_id == user_id)
|
|
237
|
+
user = session.exec(user_statement).first()
|
|
238
|
+
if not user:
|
|
239
|
+
return None
|
|
240
|
+
|
|
241
|
+
permission = session.get(Permission, permission_id)
|
|
242
|
+
if not permission:
|
|
243
|
+
return None
|
|
244
|
+
|
|
245
|
+
if permission in user.permissions:
|
|
246
|
+
user.permissions.remove(permission)
|
|
247
|
+
session.add(user)
|
|
248
|
+
session.commit()
|
|
249
|
+
session.refresh(user)
|
|
250
|
+
|
|
251
|
+
return user
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
config/config.py,sha256=vyqrlHDgCGpYX7V9fDn4g671lUU1RuWlSYCIazI-SqQ,689
|
|
3
|
-
config/db.py,sha256=b_SWTINJSVUhR0uyD4h93jPLKUzRm6Ky0tmALWbjM18,342
|
|
4
|
-
config/vault.py,sha256=9yUMXjaTYSnqr0npcQXDsg6Z7G3DityqpmHl1x42zS0,748
|
|
5
|
-
models/__init__.py,sha256=aHts_4fmmSgAGlKe-qZ9aCXjeYPBVaB-VM4LqH-y4_4,1994
|
|
6
|
-
repositories/__init__.py,sha256=b8ya7gJkFq0yzF3h8G0vIiakv_uOB9u859sdBLhEZHI,2504
|
|
7
|
-
healthdatalayer-1.0.1.dist-info/METADATA,sha256=Y2pz-zYnb_EGOLcA3_QBb0Jo03RCKu_ZC9XyJZgci-c,827
|
|
8
|
-
healthdatalayer-1.0.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
9
|
-
healthdatalayer-1.0.1.dist-info/top_level.txt,sha256=S84RTy7EJk7BqzfUpsghy7n19iFi9FVqXgHKlv68GPI,27
|
|
10
|
-
healthdatalayer-1.0.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|