@@ -186,7 +186,7 @@ async def list_role_assignments(
186186 branch_id = link .branch_id ,
187187 role_id = link .role_id ,
188188 user_id = link .user_id ,
189- env_type = link .env_type ,
189+ env_types = link .env_types ,
190190 )
191191 for link in result .scalars ().all ()
192192 ]
@@ -286,9 +286,25 @@ async def assign_role(
286286 session .add (link )
287287 created_links .append (link )
288288
289- for env_type in payload .env_types :
290- link = RoleUserLink (organization_id = organization .id , role_id = role .id , user_id = user_id , env_type = env_type )
291- session .add (link )
289+ if payload .env_types :
290+ stmt = select (RoleUserLink ).where (
291+ RoleUserLink .organization_id == organization .id ,
292+ RoleUserLink .role_id == role .id ,
293+ RoleUserLink .user_id == user_id ,
294+ )
295+ result = await session .execute (stmt )
296+ link = result .scalar_one_or_none ()
297+ if link is None :
298+ link = RoleUserLink (
299+ organization_id = organization .id ,
300+ role_id = role .id ,
301+ user_id = user_id ,
302+ env_types = payload .env_types ,
303+ )
304+ session .add (link )
305+ else :
306+ existing = link .env_types or []
307+ link .env_types = list (dict .fromkeys (existing + payload .env_types ))
292308 created_links .append (link )
293309
294310 for branch_id in payload .branch_ids :
@@ -309,7 +325,7 @@ async def assign_role(
309325 branch_id = link .branch_id ,
310326 role_id = link .role_id ,
311327 user_id = link .user_id ,
312- env_type = link .env_type ,
328+ env_types = link .env_types ,
313329 )
314330 for link in created_links
315331 ]
0 commit comments