@@ -176,10 +176,14 @@ public Response insertUser(@Valid UserBO requestDTO) {
176176 LOGGER .error ("public is reserved prefix for user id" );
177177 throw new SpagoBIServiceException ("SPAGOBI_SERVICE" , "public_ is a reserved prefix for user name" , null );
178178 }
179- ISbiUserDAO usersDao = null ;
179+ ISbiUserDAO usersDao = DAOFactory . getSbiUserDAO () ;
180180
181- usersDao = DAOFactory .getSbiUserDAO ();
182- checkIfUserCanBeAdded (requestDTO , usersDao );
181+ boolean isAdmin = userRequestDtoIsAdmin (requestDTO );
182+
183+ if (!userCanBeAdded (requestDTO , usersDao , isAdmin )) {
184+ LOGGER .error ("The limit for creating {} users has been reached." , isAdmin ? "admin " : "end " );
185+ throw new SpagoBIServiceException ("Create user" , "The limit for creating " + (isAdmin ? "admin " : "end " ) + "users has been reached." );
186+ }
183187
184188 usersDao .setUserProfile (getUserProfile ());
185189 SbiUser existingUser = usersDao .loadSbiUserByUserId (userId );
@@ -252,44 +256,39 @@ public Response insertUser(@Valid UserBO requestDTO) {
252256 }
253257 }
254258
255- private void checkIfUserCanBeAdded (UserBO requestDTO , ISbiUserDAO usersDao ) {
256- List <UserBO > dbUsers = usersDao .loadUsers ();
259+ private boolean userCanBeAdded (UserBO requestDTO , ISbiUserDAO usersDao , boolean isAdmin ) {
260+ List <SbiUser > dbUsers = usersDao .loadAllTenantsUsers ();
257261
258- boolean isAdmin = userRequestDtoIsAdmin (requestDTO );
262+ List <SbiUser > usersToCheck = filterUsersToCheck (dbUsers , isAdmin );
263+ return ProductProfiler .canAddAUser (usersToCheck .size (), isAdmin );
264+ }
259265
260- List <UserBO > usersToCheck = filterUsersToCheck (dbUsers , isAdmin );
261- if (!ProductProfiler .canAddAUser (usersToCheck .size (), isAdmin )) {
262- LOGGER .error ("Maximum number of {} users reached" , isAdmin ? "admin" : "end" );
263- throw new SpagoBIRestServiceException ("Maximum number of " + (isAdmin ? "admin" : "end" ) + " users reached" , buildLocaleFromSession (),
264- new Throwable ());
265- }
266+ private List <SbiUser > filterUsersToCheck (List <SbiUser > sbiUsers , boolean isAdmin ) {
267+ ISbiUserDAO usersDao = DAOFactory .getSbiUserDAO ();
268+ usersDao .setUserProfile (getUserProfile ());
269+
270+ return filterUsersWithRoles (sbiUsers , isAdmin , usersDao );
271+ }
272+
273+ private List <SbiUser > filterUsersWithRoles (List <SbiUser > sbiUsers , boolean isAdmin , ISbiUserDAO usersDao ) {
274+ return sbiUsers .stream ()
275+ .filter (user -> hasApplicableRoles (user , isAdmin , usersDao ))
276+ .toList ();
266277 }
267278
268- private List <UserBO > filterUsersToCheck (List <UserBO > sbiUsers , boolean isAdmin ) {
269- return sbiUsers .stream ()
270- .filter (user -> {
271- try {
272- IRoleDAO rolesDao = DAOFactory .getRoleDAO ();
273- rolesDao .setUserProfile (getUserProfile ());
274- return user .getSbiExtUserRoleses ().stream ()
275- .anyMatch (roleId -> {
276- try {
277- SbiExtRoles role = rolesDao .loadSbiExtRoleById ((Integer ) roleId );
278- return role != null &&
279- isRoleApplicable (role , isAdmin );
280- } catch (Exception e ) {
281- LOGGER .error ("Error loading role with id: {}" , roleId , e );
282- return false ;
283- }
284- });
285- } catch (Exception e ) {
286- LOGGER .error ("Error accessing roles DAO" , e );
287- return false ;
288- }
289- })
290- .toList ();
279+ private boolean hasApplicableRoles (SbiUser user , boolean isAdmin , ISbiUserDAO usersDao ) {
280+ try {
281+ ArrayList <SbiExtRoles > userRoles = usersDao .loadSbiUserRolesByIdAllTenants (user .getId ());
282+
283+ return userRoles .stream ()
284+ .anyMatch (role -> role != null && isRoleApplicable (role , isAdmin ));
285+ } catch (Exception e ) {
286+ LOGGER .error ("Error loading roles for user with id: {}" , user .getId (), e );
287+ return false ;
288+ }
291289 }
292290
291+
293292 private boolean userRequestDtoIsAdmin (@ Valid UserBO requestDTO ) {
294293 List <Integer > sbiExtUserRoleses = requestDTO .getSbiExtUserRoleses ();
295294 IRoleDAO rolesDao = DAOFactory .getRoleDAO ();
@@ -339,8 +338,12 @@ public Response updateUser(@PathParam("id") Integer id, @Valid UserBO requestDTO
339338 }
340339
341340 usersDao = DAOFactory .getSbiUserDAO ();
341+ boolean isAdmin = userRequestDtoIsAdmin (requestDTO );
342342
343- checkIfUserCanBeAdded (requestDTO , usersDao );
343+ if (!userCanBeAdded (requestDTO , usersDao , isAdmin )) {
344+ LOGGER .error ("The limit for creating {} users has been reached." , isAdmin ? "admin " : "end " );
345+ throw new SpagoBIServiceException ("Update user" , "The limit for creating " + (isAdmin ? "admin " : "end " ) + "users has been reached." );
346+ }
344347
345348 SbiUser sbiUser = new SbiUser ();
346349 sbiUser .changeId (id );
0 commit comments