HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/hi.naniguide.com/app/Models/WorkspaceRole.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;

class WorkspaceRole extends Model
{
    use HasFactory;

    protected $fillable = [
        'workspace_id',
        'name',
        'slug',
        'permissions',
        'is_default',
    ];

    protected function casts(): array
    {
        return [
            'permissions' => 'array',
            'is_default'  => 'boolean',
        ];
    }

    // ── Relationships ──────────────────────────────────────────────

    public function workspace(): BelongsTo
    {
        return $this->belongsTo(Workspace::class);
    }

    public function members(): HasMany
    {
        return $this->hasMany(WorkspaceMember::class);
    }

    // ── Permission helpers ─────────────────────────────────────────

    public function hasPermission(string $permission): bool
    {
        $perms = (array) ($this->permissions ?? []);

        return in_array($permission, $perms, true) || in_array('*', $perms, true);
    }

    public function hasAnyPermission(array $permissions): bool
    {
        foreach ($permissions as $p) {
            if ($this->hasPermission($p)) {
                return true;
            }
        }

        return false;
    }

    // ── Static permission registry ─────────────────────────────────

    public static function allPermissionKeys(): array
    {
        return [
            // Lists
            'lists.view',
            'lists.create',
            'lists.edit',
            'lists.delete',

            // Campaigns
            'campaigns.view',
            'campaigns.create',
            'campaigns.edit',
            'campaigns.delete',
            'campaigns.send',

            // Automations
            'automations.view',
            'automations.create',
            'automations.edit',
            'automations.delete',

            // Templates
            'templates.view',
            'templates.create',
            'templates.edit',
            'templates.delete',

            // Delivery Servers
            'delivery_servers.view',
            'delivery_servers.create',
            'delivery_servers.edit',
            'delivery_servers.delete',

            // Bounce Servers
            'bounce_servers.view',
            'bounce_servers.create',
            'bounce_servers.edit',
            'bounce_servers.delete',

            // Domains
            'domains.view',
            'domains.create',
            'domains.edit',
            'domains.delete',

            // Warmups
            'warmups.view',
            'warmups.create',
            'warmups.edit',
            'warmups.delete',

            // Workspace management
            'members.manage',
            'roles.manage',
            'workspace.settings',
            'billing.view',
            'activity_log.view',
        ];
    }

    public static function permissionGroups(): array
    {
        return [
            'Lists'            => ['lists.view', 'lists.create', 'lists.edit', 'lists.delete'],
            'Campaigns'        => ['campaigns.view', 'campaigns.create', 'campaigns.edit', 'campaigns.delete', 'campaigns.send'],
            'Automations'      => ['automations.view', 'automations.create', 'automations.edit', 'automations.delete'],
            'Templates'        => ['templates.view', 'templates.create', 'templates.edit', 'templates.delete'],
            'Delivery Servers' => ['delivery_servers.view', 'delivery_servers.create', 'delivery_servers.edit', 'delivery_servers.delete'],
            'Bounce Servers'   => ['bounce_servers.view', 'bounce_servers.create', 'bounce_servers.edit', 'bounce_servers.delete'],
            'Domains'          => ['domains.view', 'domains.create', 'domains.edit', 'domains.delete'],
            'Warmups'          => ['warmups.view', 'warmups.create', 'warmups.edit', 'warmups.delete'],
            'Workspace'        => ['members.manage', 'roles.manage', 'workspace.settings', 'billing.view', 'activity_log.view'],
        ];
    }
}