11package io .unityfoundation .auth ;
22
3- import io .micronaut .core .annotation .Introspected ;
43import io .micronaut .core .annotation .Nullable ;
54import io .micronaut .http .HttpResponse ;
65import io .micronaut .http .HttpStatus ;
1110import io .micronaut .security .rules .SecurityRule ;
1211import io .micronaut .serde .annotation .Serdeable ;
1312import io .unityfoundation .auth .entities .*;
14- import io .unityfoundation .auth .entities .Permission .PermissionScope ;
1513import io .unityfoundation .auth .entities .Service .ServiceStatus ;
1614import jakarta .validation .constraints .NotNull ;
1715import java .util .List ;
1816import java .util .Optional ;
19- import java .util .function .BiPredicate ;
2017
2118@ Secured (SecurityRule .IS_AUTHENTICATED )
2219@ Controller ("/api" )
@@ -26,12 +23,14 @@ public class AuthController {
2623 private final ServiceRepo serviceRepo ;
2724 private final TenantRepo tenantRepo ;
2825 private final RoleRepo roleRepo ;
26+ private final PermissionsService permissionsService ;
2927
30- public AuthController (UserRepo userRepo , ServiceRepo serviceRepo , TenantRepo tenantRepo , RoleRepo roleRepo ) {
28+ public AuthController (UserRepo userRepo , ServiceRepo serviceRepo , TenantRepo tenantRepo , RoleRepo roleRepo , PermissionsService permissionsService ) {
3129 this .userRepo = userRepo ;
3230 this .serviceRepo = serviceRepo ;
3331 this .tenantRepo = tenantRepo ;
3432 this .roleRepo = roleRepo ;
33+ this .permissionsService = permissionsService ;
3534 }
3635
3736 @ Post ("/principal/permissions" )
@@ -68,7 +67,7 @@ public UserPermissionsResponse permissions(@Body UserPermissionsRequest requestD
6867 "The Tenant and/or Service is not available for this user" );
6968 }
7069
71- return new UserPermissionsResponse .Success (getPermissionsFor (user , tenant ));
70+ return new UserPermissionsResponse .Success (permissionsService . getPermissionsFor (user , tenant ));
7271 }
7372
7473 @ Post ("/hasPermission" )
@@ -96,7 +95,7 @@ public HttpResponse<HasPermissionResponse> hasPermission(@Body HasPermissionRequ
9695 return createHasPermissionResponse (false , user .getEmail (), "The requested service is not enabled for the requested tenant!" , List .of ());
9796 }
9897
99- List <String > commonPermissions = checkUserPermission (user , tenantOptional .get (), requestDTO .permissions ());
98+ List <String > commonPermissions = permissionsService . checkUserPermission (user , tenantOptional .get (), requestDTO .permissions ());
10099 if (commonPermissions .isEmpty ()) {
101100 return createHasPermissionResponse (false , user .getEmail (), "The user does not have permission!" , commonPermissions );
102101 }
@@ -159,28 +158,6 @@ private String checkServiceStatus(Optional<Service> service) {
159158 return null ;
160159 }
161160
162- private final BiPredicate <TenantPermission , Tenant > isTenantOrSystemOrSubtenantScopeAndBelongsToTenant = (tp , t ) ->
163- PermissionScope .SYSTEM .equals (tp .permissionScope ()) || (
164- (PermissionScope .TENANT .equals (tp .permissionScope ())
165- || PermissionScope .SUBTENANT .equals (tp .permissionScope ()))
166- && tp .tenantId == t .getId ());
167-
168-
169- private List <String > checkUserPermission (User user , Tenant tenant , List <String > permissions ) {
170- List <String > commonPermissions = getPermissionsFor (user , tenant ).stream ()
171- .filter (permissions ::contains ).toList ();
172-
173- return commonPermissions ;
174- }
175-
176- private List <String > getPermissionsFor (User user , Tenant tenant ) {
177- return userRepo .getTenantPermissionsFor (user .getId ()).stream ()
178- .filter (tenantPermission ->
179- isTenantOrSystemOrSubtenantScopeAndBelongsToTenant .test (tenantPermission , tenant ))
180- .map (TenantPermission ::permissionName )
181- .toList ();
182- }
183-
184161 private HttpResponse <HasPermissionResponse > createHasPermissionResponse (boolean hasPermission ,
185162 String userEmail ,
186163 String message ,
@@ -209,14 +186,6 @@ public record HasPermissionResponse(
209186 List <String > permissions
210187 ) {}
211188
212- @ Introspected
213- public record TenantPermission (
214- long tenantId ,
215- String permissionName ,
216- PermissionScope permissionScope
217- ) {}
218-
219-
220189 public sealed interface UserPermissionsResponse {
221190 @ Serdeable
222191 record Success (List <String > permissions ) implements UserPermissionsResponse {}
0 commit comments