66from freenit .decorators import description
77from freenit .models .pagination import Page , paginate
88from freenit .models .role import Role , RoleOptional
9- from freenit .models .safe import RoleSafe , UserSafe
109from freenit .models .user import User
1110from freenit .permissions import role_perms
1211
@@ -21,30 +20,35 @@ async def get(
2120 page : int = Header (default = 1 ),
2221 perpage : int = Header (default = 10 ),
2322 _ : User = Depends (role_perms ),
24- ) -> Page [RoleSafe ]:
25- return await paginate (Role .objects , page , perpage )
23+ ) -> Page [Role ]:
24+ return await paginate (
25+ Role .objects .select_related ("users" ).exclude_fields ("users__password" ),
26+ page ,
27+ perpage ,
28+ )
2629
2730 @staticmethod
28- async def post (role : Role , _ : User = Depends (role_perms )) -> RoleSafe :
31+ async def post (role : Role , _ : User = Depends (role_perms )) -> Role :
2932 await role .save ()
3033 return role
3134
3235
3336@route ("/roles/{id}" , tags = tags )
3437class RoleDetailAPI :
3538 @staticmethod
36- async def get (id , _ : User = Depends (role_perms )) -> RoleSafe :
39+ async def get (id , _ : User = Depends (role_perms )) -> Role :
3740 try :
38- role = await Role .objects .get (pk = id )
41+ role = (
42+ await Role .objects .select_related ("users" )
43+ .exclude_fields ("users__password" )
44+ .get (pk = id )
45+ )
3946 except ormar .exceptions .NoMatch :
4047 raise HTTPException (status_code = 404 , detail = "No such role" )
41- await role .load_all (follow = True )
4248 return role
4349
4450 @staticmethod
45- async def patch (
46- id , role_data : RoleOptional , _ : User = Depends (role_perms )
47- ) -> RoleSafe :
51+ async def patch (id , role_data : RoleOptional , _ : User = Depends (role_perms )) -> Role :
4852 if Role .dbtype () == "sql" :
4953 try :
5054 role = await Role .objects .get (pk = id )
@@ -58,7 +62,7 @@ async def patch(
5862 )
5963
6064 @staticmethod
61- async def delete (id , _ : User = Depends (role_perms )) -> RoleSafe :
65+ async def delete (id , _ : User = Depends (role_perms )) -> Role :
6266 try :
6367 role = await Role .objects .get (pk = id )
6468 except ormar .exceptions .NoMatch :
@@ -71,12 +75,15 @@ async def delete(id, _: User = Depends(role_perms)) -> RoleSafe:
7175class RoleUserAPI :
7276 @staticmethod
7377 @description ("Assign user to role" )
74- async def post (role_id , user_id , _ : User = Depends (role_perms )) -> UserSafe :
78+ async def post (role_id , user_id , _ : User = Depends (role_perms )) -> User :
7579 try :
76- user = await User .objects .get (pk = user_id )
80+ user = (
81+ await User .objects .select_related ("roles" )
82+ .exclude_fields ("password" )
83+ .get (pk = user_id )
84+ )
7785 except ormar .exceptions .NoMatch :
7886 raise HTTPException (status_code = 404 , detail = "No such user" )
79- await user .load_all ()
8087 for role in user .roles :
8188 if role .id == role_id :
8289 raise HTTPException (status_code = 409 , detail = "User already assigned" )
@@ -89,16 +96,19 @@ async def post(role_id, user_id, _: User = Depends(role_perms)) -> UserSafe:
8996
9097 @staticmethod
9198 @description ("Deassign user to role" )
92- async def delete (role_id , user_id , _ : User = Depends (role_perms )) -> UserSafe :
99+ async def delete (role_id , user_id , _ : User = Depends (role_perms )) -> User :
93100 try :
94- user = await User .objects .get (pk = user_id )
101+ user = (
102+ await User .objects .select_related ("roles" )
103+ .exclude_fields ("password" )
104+ .get (pk = user_id )
105+ )
95106 except ormar .exceptions .NoMatch :
96107 raise HTTPException (status_code = 404 , detail = "No such user" )
97108 try :
98109 role = await Role .objects .get (pk = role_id )
99110 except ormar .exceptions .NoMatch :
100111 raise HTTPException (status_code = 404 , detail = "No such role" )
101- await user .load_all ()
102112 try :
103113 await user .roles .remove (role )
104114 except ormar .exceptions .NoMatch :
0 commit comments