Skip to content

Commit 11c49eb

Browse files
fix(#1): this commit introduces a fix to list individual and inherited permissions for user groups, allowing all of their permissions to be viewed.
1 parent 637ade1 commit 11c49eb

1 file changed

Lines changed: 22 additions & 4 deletions

File tree

Source/HttpsRichardy.Federation.Application/Handlers/User/ListUserAssignedPermissionsHandler.cs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace 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

Comments
 (0)