@@ -522,93 +522,99 @@ public function update(SaveUserRequest $request, User $user): JsonResponse
522522 {
523523 $ this ->authorize ('update ' , User::class);
524524
525- $ this ->authorize ('update ' , $ user );
525+ $ this ->authorize ('update ' , $ user );
526526
527- /**
528- * This is a janky hack to prevent people from changing admin demo user data on the public demo.
529- * The $ids 1 and 2 are special since they are seeded as superadmins in the demo seeder.
530- * Thanks, jerks. You are why we can't have nice things. - snipe
531- *
532- */
527+ /**
528+ * This is a janky hack to prevent people from changing admin demo user data on the public demo.
529+ * The $ids 1 and 2 are special since they are seeded as superadmins in the demo seeder.
530+ * Thanks, jerks. You are why we can't have nice things. - snipe
531+ *
532+ */
533533
534534 if ((($ user ->id == 1 ) || ($ user ->id == 2 )) && (config ('app.lock_passwords ' ))) {
535- return response ()->json (Helper::formatStandardApiResponse ('error ' , null , 'Permission denied. You cannot update user information via API on the demo. ' ));
536- }
535+ return response ()->json (Helper::formatStandardApiResponse ('error ' , null , 'Permission denied. You cannot update user information via API on the demo. ' ));
536+ }
537+
538+ // Pull out sensitive fields that require extra permission
539+ $ user ->fill ($ request ->except (['password ' , 'username ' , 'email ' , 'activated ' , 'permissions ' , 'activation_code ' , 'remember_token ' , 'two_factor_secret ' , 'two_factor_enrolled ' , 'two_factor_optin ' ]));
540+
537541
538- $ user-> fill ( $ request -> all ());
542+ if ( auth ()-> user ()-> can ( ' canEditAuthFields ' , $ user) && auth ()-> user ()-> can ( ' editableOnDemo ' )) {
539543
540- if ($ request ->filled ('company_id ' )) {
541- $ user ->company_id = Company:: getIdForCurrentUser ($ request ->input ('company_id ' ));
544+ if ($ request ->filled ('password ' )) {
545+ $ user ->password = bcrypt ($ request ->input ('password ' ));
542546 }
543547
544- if ($ user -> id == $ request ->input ( ' manager_id ' )) {
545- return response ()-> json (Helper:: formatStandardApiResponse ( ' error ' , null , ' You cannot be your own manager ' ) );
548+ if ($ request ->filled ( ' username ' )) {
549+ $ user -> username = $ request -> input ( ' username ' );
546550 }
547551
548- // check for permissions related fields and pull them out if the current user cannot edit them
549- if (auth ()->user ()->can ('canEditAuthFields ' , $ user ) && auth ()->user ()->can ('editableOnDemo ' )) {
552+ if ($ request ->filled ('email ' )) {
553+ $ user ->email = $ request ->input ('email ' );
554+ }
550555
551- if ($ request ->filled ('password ' )) {
552- $ user ->password = bcrypt ( $ request ->input ('password ' ) );
553- }
556+ if ($ request ->filled ('activated ' )) {
557+ $ user ->activated = $ request ->input ('activated ' );
558+ }
554559
555- if ($ request ->filled ('username ' )) {
556- $ user ->username = $ request ->input ('username ' );
557- }
560+ }
558561
559- if ( $ request -> filled (' display_name ' )) {
560- $ user -> display_name = $ request -> input ( ' display_name ' );
561- }
562+ // We need to use has() instead of filled()
563+ // here because we need to overwrite permissions
564+ // if someone needs to null them out
562565
563- if ($ request ->filled ('email ' )) {
564- $ user ->email = $ request ->input ('email ' );
565- }
566+ if ($ request ->filled ('display_name ' )) {
567+ $ user ->display_name = $ request ->input ('display_name ' );
568+ }
566569
567- if ($ request ->filled ('activated ' )) {
568- $ user ->activated = $ request ->input ('activated ' );
569- }
570+ if ($ request ->filled ('company_id ' )) {
571+ $ user ->company_id = Company:: getIdForCurrentUser ( $ request ->input ('company_id ' ) );
572+ }
570573
571- }
574+ if ($ user ->id == $ request ->input ('manager_id ' )) {
575+ return response ()->json (Helper::formatStandardApiResponse ('error ' , null , 'You cannot be your own manager ' ));
576+ }
572577
573- // We need to use has() instead of filled()
574- // here because we need to overwrite permissions
575- // if someone needs to null them out
576- if ($ request ->has ('permissions ' )) {
577- $ permissions_array = $ request ->input ('permissions ' );
578578
579- // Strip out the individual superuser permission if the API user isn't a superadmin
580- if (!auth ()->user ()->isSuperUser ()) {
581- unset($ permissions_array ['superuser ' ]);
582- }
579+
580+ if ($ request ->has ('permissions ' )) {
581+ $ permissions_array = $ request ->input ('permissions ' );
583582
584- $ user ->permissions = $ permissions_array ;
583+ // Strip out the individual superuser permission if the API user isn't a superadmin
584+ if (!auth ()->user ()->isSuperUser ()) {
585+ unset($ permissions_array ['superuser ' ]);
585586 }
586587
587- if ($ request ->has ('location_id ' )) {
588- // Update the location of any assets checked out to this user
589- Asset::where ('assigned_type ' , User::class)
590- ->where ('assigned_to ' , $ user ->id )->update (['location_id ' => $ request ->input ('location_id ' , null )]);
591- }
592- app ('App\Http\Requests\ImageUploadRequest ' )->handleImages ($ user , 600 , 'avatar ' , 'avatars ' , 'avatar ' );
588+ $ user ->permissions = $ permissions_array ;
589+ }
590+
591+ if ($ request ->has ('location_id ' )) {
592+ // Update the location of any assets checked out to this user
593+ Asset::where ('assigned_type ' , User::class)
594+ ->where ('assigned_to ' , $ user ->id )->update (['location_id ' => $ request ->input ('location_id ' , null )]);
595+ }
593596
594- if ($ user ->save ()) {
595- // Check if the request has groups passed and has a value, AND that the user us a superuser
596- if (($ request ->has ('groups ' )) && (auth ()->user ()->isSuperUser ())) {
597597
598- $ validator = Validator::make ($ request ->only ('groups ' ), [
599- 'groups.* ' => 'integer|exists:permission_groups,id ' ,
600- ]);
598+ app ('App\Http\Requests\ImageUploadRequest ' )->handleImages ($ user , 600 , 'avatar ' , 'avatars ' , 'avatar ' );
601599
602- if ($ validator ->fails ()) {
603- return response ()->json (Helper::formatStandardApiResponse ('error ' , null , $ validator ->errors ()));
604- }
600+ if ($ user ->save ()) {
601+ // Check if the request has groups passed and has a value, AND that the user us a superuser
602+ if (($ request ->has ('groups ' )) && (auth ()->user ()->isSuperUser ())) {
603+
604+ $ validator = Validator::make ($ request ->only ('groups ' ), [
605+ 'groups.* ' => 'integer|exists:permission_groups,id ' ,
606+ ]);
605607
606- // Sync the groups since the user is a superuser and the groups pass validation
607- $ user -> groups ()->sync ( $ request -> input ( ' groups ' ));
608+ if ( $ validator -> fails ()) {
609+ return response ()->json (Helper:: formatStandardApiResponse ( ' error ' , null , $ validator -> errors () ));
608610 }
609- return response ()->json (Helper::formatStandardApiResponse ('success ' , (new UsersTransformer )->transformUser ($ user ), trans ('admin/users/message.success.update ' )));
611+
612+ // Sync the groups since the user is a superuser and the groups pass validation
613+ $ user ->groups ()->sync ($ request ->input ('groups ' ));
610614 }
611- return response ()->json (Helper::formatStandardApiResponse ('error ' , null , $ user ->getErrors ()));
615+ return response ()->json (Helper::formatStandardApiResponse ('success ' , (new UsersTransformer )->transformUser ($ user ), trans ('admin/users/message.success.update ' )));
616+ }
617+ return response ()->json (Helper::formatStandardApiResponse ('error ' , null , $ user ->getErrors ()));
612618 }
613619
614620 /**
0 commit comments