Viewing File: /home/markqprx/iniasli.pro/database/seeders/WorkspaceRoleSeeder.php

<?php

namespace Database\Seeders;

use Common\Auth\Permissions\Permission;
use Common\Auth\Roles\Role;
use Illuminate\Database\Seeder;
use Illuminate\Support\Collection;
use Str;
use const App\Providers\WORKSPACED_RESOURCES;

class WorkspaceRoleSeeder extends Seeder
{
    /**
     * @var Role
     */
    private $role;

    public function __construct(Role $role)
    {
        $this->role = $role;
    }

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        if ($this->role->where('type', 'workspace')->count() === 0) {
            $permissions = $this->loadPermissions();
            $role = $this->role->create([
                'name' => 'Workspace Admin',
                'description' => 'Manage all workspace resources, invite and manage members.',
                'type' => 'workspace',
            ]);
            $role->permissions()->sync($permissions);

            $editorPermissions = $permissions->filter(function(Permission $permission) {
                return $permission->group !== 'workspace_members';
            });
            $role = $this->role->create([
                'name' => 'Workspace Editor',
                'description' => "Manage all workspace resources, regardless of resource owner.",
                'type' => 'workspace',
            ]);
            $role->permissions()->sync($editorPermissions);

            $memberPermissions = $permissions->filter(function(Permission $permission) {
                return $permission->group !== 'workspace_members' && (Str::endsWith($permission->name, 'view') || Str::endsWith($permission->name, 'create'));
            });
            $role = $this->role->create([
                'name' => 'Workspace Member',
                'description' => "Create workspace resources, but can't edit or delete resources owned by other members.",
                'type' => 'workspace',
            ]);
            $role->permissions()->sync($memberPermissions);
        }
    }

    private function loadPermissions(): Collection
    {
        $groups = collect(WORKSPACED_RESOURCES)
            ->map(function($resource) {
                return app($resource)->getTable();
            });

        $groups->push('workspace_members');

        return app(Permission::class)->whereIn('group', $groups)->get();
    }
}
Back to Directory File Manager