33from sqlalchemy .sql .expression import Select
44from starlette .requests import Request
55
6+ from auth_backend .admin .filter import FilteredModelConverter
67from auth_backend .models .db import Group , Scope , User
7- from auth_backend .routes .groups import create_group_logic , delete_group_id
8+ from auth_backend .routes .groups import create_group_logic , delete_group_id , patch_group_logic
89from auth_backend .routes .user import patch_user_groups
9- from auth_backend .schemas .models import GroupPost
10+ from auth_backend .schemas .models import GroupPatch , GroupPost
1011
1112
1213class ScopeAdmin (ModelView , model = Scope ):
@@ -27,6 +28,7 @@ class ScopeAdmin(ModelView, model=Scope):
2728 column_default_sort = [("id" , False )]
2829 form_excluded_columns = ["create_ts" , "update_ts" , "groups" , "user_sessions" , "is_deleted" ]
2930 can_create = False # I don't know how to use UnionAuth there to get user_id that is required
31+ form_converter = FilteredModelConverter
3032
3133 def list_query (self , request : Request ) -> Select :
3234 return select (Scope ).where (Scope .is_deleted == False )
@@ -65,14 +67,14 @@ class GroupAdmin(ModelView, model=Group):
6567 column_sortable_list = ["id" , "name" , "parent_id" , "is_deleted" ]
6668 column_default_sort = [("id" , False )]
6769 form_excluded_columns = ["create_ts" , "update_ts" , "is_deleted" ]
70+ form_converter = FilteredModelConverter
6871
6972 def list_query (self , request : Request ) -> Select :
7073 return select (Group ).where (Group .is_deleted == False )
7174
7275 def count_query (self , request : Request ) -> Select :
7376 return select (func .count (Group .id )).where (Group .is_deleted == False )
7477
75- # add logic with deleted scopes showed
7678 async def insert_model (self , request , data ):
7779 scope_ids = [int (s ) for s in (data .pop ("scopes" , None ) or [])]
7880 parent_id = int (data ["parent_id" ]) if data .get ("parent_id" ) else None
@@ -81,7 +83,17 @@ async def insert_model(self, request, data):
8183 result = create_group_logic (group_inp , session )
8284 return Group .get (result ["id" ], session = session )
8385
84- # add update group
86+ async def update_model (self , request , pk , data ):
87+ scope_ids = [int (s ) for s in (data .pop ("scopes" , None ) or [])]
88+ parent_id = int (data ["parent_id" ]) if data .get ("parent_id" ) else None
89+ group_inp = GroupPatch (
90+ name = data .get ("name" ),
91+ parent_id = parent_id ,
92+ scopes = scope_ids ,
93+ )
94+ with self .session_maker (expire_on_commit = False ) as session :
95+ return patch_group_logic (int (pk ), group_inp , session )
96+
8597 async def delete_model (self , request , pk ):
8698 with self .session_maker (expire_on_commit = False ) as session :
8799 delete_group_id (int (pk ), session )
@@ -104,6 +116,7 @@ class UserAdmin(ModelView, model=User):
104116 column_formatters_detail = {
105117 "scopes" : lambda m , a : ", " .join (s .name for s in (m .scopes or set ())),
106118 }
119+ form_converter = FilteredModelConverter
107120
108121 def list_query (self , request : Request ) -> Select :
109122 return select (User ).where (User .is_deleted == False )
0 commit comments