From 22712ac9b2840cb5669f934fada2adaaac7a86cd Mon Sep 17 00:00:00 2001 From: Nadir Hamid Date: Fri, 12 Jun 2026 22:03:23 +0000 Subject: [PATCH] add more workspace user account permissions --- app/app/Helpers/MainHelper.php | 3 +- .../JWT/AuthenticateController.php | 23 ++++++-- ...12_175914_add_new_workspace_user_perms.php | 46 ++++++++++++++++ ...17_add_new_workspace_user_delete_perms.php | 54 +++++++++++++++++++ 4 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 app/database/migrations/2026_06_12_175914_add_new_workspace_user_perms.php create mode 100644 app/database/migrations/2026_06_12_213117_add_new_workspace_user_delete_perms.php diff --git a/app/app/Helpers/MainHelper.php b/app/app/Helpers/MainHelper.php index a95f7374b..82da11e73 100755 --- a/app/app/Helpers/MainHelper.php +++ b/app/app/Helpers/MainHelper.php @@ -781,10 +781,11 @@ public static function sortAlphabet(&$items, $key) { return strcmp(strtolower($a[$key]), strtolower($b[$key])); }); } - public static function createWorkspaceLoginResult($token, $user, $workspace, $availableWorkspaces = []){ + public static function createWorkspaceLoginResult($token, $user, $workspace, $workspaceUser, $availableWorkspaces = []){ $result = [ 'token' => MainHelper::createJWTPayload($token), 'workspace' => $workspace->toArrayWithRoles($user), + 'currentWorkspaceUser' => $workspaceUser->toArray(), 'enable_2fa' => $user->enable_2fa, 'isAdmin' => FALSE, 'adminWorkspaceToken' => '', diff --git a/app/app/Http/Controllers/JWT/AuthenticateController.php b/app/app/Http/Controllers/JWT/AuthenticateController.php index 5d1e9a507..3d6b2cbeb 100755 --- a/app/app/Http/Controllers/JWT/AuthenticateController.php +++ b/app/app/Http/Controllers/JWT/AuthenticateController.php @@ -6,6 +6,7 @@ use JWTFactory; use Auth; use Hash; +use Log; use Tymon\JWTAuth\Exceptions\JWTException; use App\Http\Controllers\Api\ApiController; use App\Http\Controllers\Api\ApiAuthController; @@ -110,12 +111,17 @@ public function authenticate(Request $request) ]; }) ->toArray(); + \Log::info("authenticate - current user id: " . $currentUser->id); + \Log::info("authenticate - workspace: " . json_encode($workspace)); $workspaceUser = WorkspaceUser::select(array('workspaces_users.*')); $workspaceUser->where('workspaces_users.user_id', $currentUser->id); if (!empty($workspace)) { - $workspaceUser->where('id', $workspace->id); + \Log::info("authenticate - filtering by workspace id: " . $workspace->id); + $workspaceUser->where('workspaces_users.workspace_id', $workspace->id); } + $workspaceUser = $workspaceUser->first(); + \Log::info("authenticate - workspaceUser result: " . json_encode($workspaceUser)); if (empty($workspace)) { $workspace = Workspace::find($workspaceUser->workspace_id); @@ -172,7 +178,7 @@ public function authenticate(Request $request) return $this->response->array($result); } - $result = MainHelper::createWorkspaceLoginResult($token, $currentUser, $workspace, $availableWorkspaces); + $result = MainHelper::createWorkspaceLoginResult($token, $currentUser, $workspace, $workspaceUser, $availableWorkspaces); return $this->response->array($result); } @@ -202,8 +208,17 @@ public function requestWorkspaceToken(Request $request) ]; }) ->toArray(); - - $result = MainHelper::createWorkspaceLoginResult($token, $currentUser, $workspace, $availableWorkspaces); + + + $workspaceUser = WorkspaceUser::select(array('workspaces_users.*')); + + Log::info("requestWorkspaceToken - user_id: " . $currentUser->id . ", workspace_id: " . $workspace->id); + $workspaceUser->where('workspaces_users.user_id', $currentUser->id); + $workspaceUser->where('workspaces_users.workspace_id', $workspace->id); + $workspaceUser = $workspaceUser->first(); + Log::info("requestWorkspaceToken - workspaceUser result: " . json_encode($workspaceUser)); + + $result = MainHelper::createWorkspaceLoginResult($token, $currentUser, $workspace, $workspaceUser, $availableWorkspaces); return $this->response->array($result); } diff --git a/app/database/migrations/2026_06_12_175914_add_new_workspace_user_perms.php b/app/database/migrations/2026_06_12_175914_add_new_workspace_user_perms.php new file mode 100644 index 000000000..edbf8ee53 --- /dev/null +++ b/app/database/migrations/2026_06_12_175914_add_new_workspace_user_perms.php @@ -0,0 +1,46 @@ +boolean('manage_faxes')->default(0)->after('manage_recordings'); + $table->boolean('manage_files')->default(0)->after('manage_faxes'); + $table->boolean('manage_support')->default(0)->after('manage_users'); + $table->boolean('manage_geo_permissions')->default(0)->after('manage_extension_codes'); + $table->boolean('manage_extended_settings')->default(0)->after('manage_geo_permissions'); + $table->boolean('manage_workspace_options')->default(0)->after('manage_workspace'); + $table->boolean('create_port_request')->default(0)->after('manage_workspace'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('workspaces_users', function (Blueprint $table) { + $table->dropColumn([ + 'manage_faxes', + 'manage_files', + 'manage_support', + 'manage_geo_permissions', + 'manage_extended_settings', + 'manage_workspace_options', + 'create_port_request' + ]); + }); + } +} \ No newline at end of file diff --git a/app/database/migrations/2026_06_12_213117_add_new_workspace_user_delete_perms.php b/app/database/migrations/2026_06_12_213117_add_new_workspace_user_delete_perms.php new file mode 100644 index 000000000..ef0b967a6 --- /dev/null +++ b/app/database/migrations/2026_06_12_213117_add_new_workspace_user_delete_perms.php @@ -0,0 +1,54 @@ +boolean('delete_extension')->default(0)->after('create_extension'); + $table->boolean('delete_did')->default(0)->after('create_did'); + $table->boolean('delete_flow')->default(0)->after('create_flow'); + $table->boolean('delete_function')->default(0)->after('create_function'); + $table->boolean('delete_phone')->default(0)->after('create_phone'); + $table->boolean('delete_phonegroup')->default(0)->after('create_phonegroup'); + $table->boolean('delete_phoneglobalsetting')->default(0)->after('create_phoneglobalsetting'); + $table->boolean('delete_phoneindividualsetting')->default(0)->after('create_phoneindividualsetting'); + $table->boolean('delete_byo_carrier')->default(0)->after('create_byo_carrier'); + $table->boolean('delete_byo_did_number')->default(0)->after('create_byo_did_number'); + $table->boolean('delete_trunks')->default(0)->after('create_trunks'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('workspaces_users', function (Blueprint $table) { + $table->dropColumn([ + 'delete_extension', + 'delete_did', + 'delete_flow', + 'delete_function', + 'delete_phone', + 'delete_phonegroup', + 'delete_phoneglobalsetting', + 'delete_phoneindividualsetting', + 'delete_byo_carrier', + 'delete_byo_did_number', + 'delete_trunks' + ]); + }); + } +} \ No newline at end of file