44
55use Illuminate \Http \Request ;
66use Illuminate \Support \Facades \Auth ;
7- use Illuminate \Support \Facades \Cache ;
8- use ProcessMaker \Events \PermissionChanged ;
7+ use Illuminate \Validation \ValidationException ;
98use ProcessMaker \Events \PermissionUpdated ;
109use ProcessMaker \Http \Controllers \Controller ;
11- use ProcessMaker \Http \Resources \ApiCollection ;
1210use ProcessMaker \Models \Group ;
1311use ProcessMaker \Models \Permission ;
1412use ProcessMaker \Models \User ;
@@ -30,7 +28,7 @@ class PermissionController extends Controller
3028 *
3129 * @param Request $request
3230 *
33- * @return Response
31+ * @return \Illuminate\Support\Collection
3432 */
3533 public function index (Request $ request )
3634 {
@@ -44,7 +42,7 @@ public function index(Request $request)
4442 *
4543 * @param Request $request
4644 *
47- * @return Response
45+ * @return \Illuminate\Http\ Response
4846 *
4947 * @OA\Put(
5048 * path="/permissions",
@@ -82,8 +80,22 @@ public function index(Request $request)
8280 */
8381 public function update (Request $ request )
8482 {
83+ $ request ->validate ([
84+ 'user_id ' => 'required_without:group_id|integer ' ,
85+ 'group_id ' => 'required_without:user_id|integer ' ,
86+ 'permission_names ' => 'nullable|array ' ,
87+ ]);
88+
89+ if ($ request ->filled ('user_id ' ) && $ request ->filled ('group_id ' )) {
90+ throw ValidationException::withMessages ([
91+ 'user_id ' => [__ ('The user_id field cannot be present when group_id is present. ' )],
92+ 'group_id ' => [__ ('The group_id field cannot be present when user_id is present. ' )],
93+ ]);
94+ }
95+
8596 //Obtain the requested user or group
86- if ($ request ->input ('user_id ' )) {
97+ if ($ request ->filled ('user_id ' )) {
98+ $ this ->authorize ('edit-users ' );
8799 $ entity = User::findOrFail ($ request ->input ('user_id ' ));
88100 // Obtain user old Permissions before save
89101 $ originalPermissionNames = $ entity ->permissions ()->pluck ('name ' )->toArray ();
@@ -98,14 +110,15 @@ public function update(Request $request)
98110 $ entity ->is_administrator = $ isSettingToAdmin ;
99111 $ entity ->save ();
100112 }
101- } elseif ($ request ->input ('group_id ' )) {
113+ } elseif ($ request ->filled ('group_id ' )) {
114+ $ this ->authorize ('edit-groups ' );
102115 $ entity = Group::findOrFail ($ request ->input ('group_id ' ));
103116 // Obtain group old Permissions before save
104117 $ originalPermissionNames = $ entity ->permissions ()->pluck ('name ' )->toArray ();
105118 }
106119
107120 // Obtain the requested permission names for that entity
108- $ requestPermissions = $ request ->input ('permission_names ' );
121+ $ requestPermissions = $ request ->input ('permission_names ' ) ?? [] ;
109122
110123 // Convert permission names into a collection of Permission models
111124 $ permissions = Permission::whereIn ('name ' , $ requestPermissions )->get ();
@@ -114,7 +127,7 @@ public function update(Request $request)
114127 PermissionUpdated::dispatch (
115128 $ requestPermissions ,
116129 $ originalPermissionNames ,
117- $ entity ->is_administrator ? : false ,
130+ $ entity instanceof User ? $ entity ->is_administrator : false ,
118131 $ request ->input ('user_id ' ),
119132 $ request ->input ('group_id ' )
120133 );
0 commit comments