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 7ba4437677..8acb45e4da 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); + }); + } }