6
6
from pydantic import BaseModel , ConfigDict , field_validator
7
7
from sqlmodel import Session , select
8
8
from utils .db import get_session
9
- from utils .models import Role , RolePermissionLink , ValidPermissions , utc_time
9
+ from utils .auth import get_authenticated_user
10
+ from utils .models import Role , RolePermissionLink , ValidPermissions , utc_time , User
10
11
11
12
logger = getLogger ("uvicorn.error" )
12
13
15
16
16
17
# -- Custom Exceptions --
17
18
19
+
18
20
class RoleAlreadyExistsError (HTTPException ):
19
21
"""Raised when attempting to create a role with a name that already exists"""
20
22
@@ -107,9 +109,11 @@ async def as_form(
107
109
108
110
# -- Routes --
109
111
112
+
110
113
@router .post ("/" , response_class = RedirectResponse )
111
114
def create_role (
112
115
role : RoleCreate = Depends (RoleCreate .as_form ),
116
+ user : User = Depends (get_authenticated_user ),
113
117
session : Session = Depends (get_session )
114
118
) -> RedirectResponse :
115
119
# Create role and permissions in a single transaction
@@ -128,7 +132,11 @@ def create_role(
128
132
129
133
130
134
@router .get ("/{role_id}" , response_model = RoleRead )
131
- def read_role (role_id : int , session : Session = Depends (get_session )):
135
+ def read_role (
136
+ role_id : int ,
137
+ user : User = Depends (get_authenticated_user ),
138
+ session : Session = Depends (get_session )
139
+ ):
132
140
db_role : Role | None = session .get (Role , role_id )
133
141
if not db_role or not db_role .id or db_role .deleted :
134
142
raise RoleNotFoundError ()
@@ -152,6 +160,7 @@ def read_role(role_id: int, session: Session = Depends(get_session)):
152
160
@router .put ("/{role_id}" , response_class = RedirectResponse )
153
161
def update_role (
154
162
role : RoleUpdate = Depends (RoleUpdate .as_form ),
163
+ user : User = Depends (get_authenticated_user ),
155
164
session : Session = Depends (get_session )
156
165
) -> RedirectResponse :
157
166
db_role : Role | None = session .get (Role , role .id )
@@ -181,6 +190,7 @@ def update_role(
181
190
@router .delete ("/{role_id}" , response_class = RedirectResponse )
182
191
def delete_role (
183
192
role_id : int ,
193
+ user : User = Depends (get_authenticated_user ),
184
194
session : Session = Depends (get_session )
185
195
) -> RedirectResponse :
186
196
db_role = session .get (Role , role_id )
0 commit comments