11namespace HttpsRichardy . Federation . Application . Handlers . User ;
22
3- public sealed class ListUserAssignedPermissionsHandler ( IUserCollection collection ) :
3+ public sealed class ListUserAssignedPermissionsHandler ( IUserCollection collection , IGroupCollection groupCollection ) :
44 IDispatchHandler < ListUserAssignedPermissionsParameters , Result < IReadOnlyCollection < PermissionDetailsScheme > > >
55{
66 public async Task < Result < IReadOnlyCollection < PermissionDetailsScheme > > > HandleAsync (
@@ -13,8 +13,26 @@ public async Task<Result<IReadOnlyCollection<PermissionDetailsScheme>>> HandleAs
1313 var users = await collection . GetUsersAsync ( filters , cancellation ) ;
1414 var user = users . FirstOrDefault ( ) ;
1515
16- return user is not null
17- ? Result < IReadOnlyCollection < PermissionDetailsScheme > > . Success ( PermissionMapper . AsResponse ( user . Permissions ) )
18- : Result < IReadOnlyCollection < PermissionDetailsScheme > > . Failure ( UserErrors . UserDoesNotExist ) ;
16+ if ( user is null )
17+ {
18+ return Result < IReadOnlyCollection < PermissionDetailsScheme > > . Failure ( UserErrors . UserDoesNotExist ) ;
19+ }
20+
21+ var identifiers = user . Groups
22+ . Select ( group => group . Id )
23+ . ToList ( ) ;
24+
25+ var groupFilters = GroupFilters . WithSpecifications ( )
26+ . WithIdentifiers ( [ .. identifiers ] )
27+ . Build ( ) ;
28+
29+ var groups = await groupCollection . GetGroupsAsync ( groupFilters , cancellation ) ;
30+ var permissions = groups
31+ . SelectMany ( group => group . Permissions )
32+ . Concat ( user . Permissions )
33+ . DistinctBy ( permission => permission . Name )
34+ . ToList ( ) ;
35+
36+ return Result < IReadOnlyCollection < PermissionDetailsScheme > > . Success ( PermissionMapper . AsResponse ( permissions ) ) ;
1937 }
2038}
0 commit comments