From 38ae08749d31f15014fbed0ce711150481a61509 Mon Sep 17 00:00:00 2001 From: luNunezProcessmaker Date: Tue, 24 Sep 2024 13:36:47 -0400 Subject: [PATCH] feature/FOUR-19316 --- ProcessMaker/Observers/UserObserver.php | 1 + database/seeders/PermissionSeeder.php | 34 ++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/ProcessMaker/Observers/UserObserver.php b/ProcessMaker/Observers/UserObserver.php index 36c14ca046..d8e45ef942 100644 --- a/ProcessMaker/Observers/UserObserver.php +++ b/ProcessMaker/Observers/UserObserver.php @@ -37,6 +37,7 @@ public function created(User $user): void { $perList = [ 'view-process-catalog', + 'view-my_requests', ]; $permissionIds = Permission::whereIn('name', $perList)->pluck('id')->toArray(); $user->permissions()->attach($permissionIds); diff --git a/database/seeders/PermissionSeeder.php b/database/seeders/PermissionSeeder.php index e16cdf68b4..d180268739 100644 --- a/database/seeders/PermissionSeeder.php +++ b/database/seeders/PermissionSeeder.php @@ -3,7 +3,9 @@ namespace Database\Seeders; use Illuminate\Database\Seeder; +use ProcessMaker\Models\Group; use ProcessMaker\Models\Permission; +use ProcessMaker\Models\User; class PermissionSeeder extends Seeder { @@ -116,16 +118,24 @@ class PermissionSeeder extends Seeder ], ]; + private $defaultPermissions = [ + 'view-my_requests', + ]; + public function run($seedUser = null) { foreach ($this->permissionGroups as $groupName => $permissions) { foreach ($permissions as $permissionString) { - Permission::updateOrCreate([ + $permission = Permission::updateOrCreate([ 'name' => $permissionString, ], [ 'title' => ucwords(preg_replace('/(\-|_)/', ' ', $permissionString)), 'group' => $groupName, ]); + + if (in_array($permissionString, $this->defaultPermissions)) { + $this->assignDefaultPermission($permission); + } } } @@ -136,4 +146,26 @@ public function run($seedUser = null) $seedUser->save(); } } + + /** + * Assign default permission to users and groups. + */ + private function assignDefaultPermission(Permission $permission): void + { + $userIds = User::nonSystem()->pluck('id'); + $groupIds = Group::pluck('id'); + + // Define the chunk size for the permission assignment + $chunkSize = 500; + + // Attach user IDs in chunks + $userIds->chunk($chunkSize)->each(function ($chunk) use ($permission) { + $permission->users()->attach($chunk); + }); + + // Attach group IDs in chunks + $groupIds->chunk($chunkSize)->each(function ($chunk) use ($permission) { + $permission->groups()->attach($chunk); + }); + } }