@extends('layouts.layoutMaster') @section('title', 'Role Detail') @php $breadcrumbs = [ ['url' => route('dashboard'), 'label' => 'Dashboard'], ['url' => route('role.index'), 'label' => 'Role'], ['url' => route('role.show', ['role' => $model->id]), 'label' => $model->name], ]; // Get all permissions for this role with IDs $permissionsList = $model->permissions->pluck('name')->toArray(); $permissionsWithIds = $model->permissions->pluck('id', 'name')->toArray(); // Get resource labels from config $resourceLabels = config('permissions.resources', []); $customPermissionsConfig = config('permissions.custom_permissions', []); $exclusions = config('permissions.excluded_permissions', []); // Initialize all resources with false for all permissions $groupedPermissions = []; $customPermissionsGrouped = []; // Helper function to check if permission is excluded $isExcluded = function($resource, $action) use ($exclusions) { foreach ($exclusions as $pattern) { if ($pattern === "{$resource}.{$action}") return true; if (str_starts_with($pattern, '*.') && str_ends_with($pattern, ".{$action}")) return true; if ($pattern === "{$resource}.*") return true; } return false; }; // Initialize all resources from config with false values foreach ($resourceLabels as $resourceKey => $resourceLabel) { // Skip if entire resource is excluded if ($isExcluded($resourceKey, '*')) { continue; } // Initialize basic permissions $groupedPermissions[$resourceLabel] = [ 'index' => false, 'show' => false, 'create' => false, 'update' => false, 'destroy' => false, ]; // Initialize custom permissions for this resource if they exist if (isset($customPermissionsConfig[$resourceKey])) { $customPermissionsGrouped[$resourceLabel] = []; foreach ($customPermissionsConfig[$resourceKey] as $action => $label) { if (!$isExcluded($resourceKey, $action)) { $customPermissionsGrouped[$resourceLabel][] = [ 'resource_key' => $resourceKey, 'action' => $action, 'label' => $label, 'granted' => false ]; } } } } // Now mark the permissions that are actually granted foreach ($permissionsList as $permission) { $parts = explode('.', $permission); if (count($parts) >= 2) { $resourceKey = $parts[0]; $action = $parts[1]; // Get resource label from config $resourceLabel = $resourceLabels[$resourceKey] ?? null; if (!$resourceLabel) continue; // Check if this is a custom permission $isCustom = isset($customPermissionsConfig[$resourceKey]) && array_key_exists($action, $customPermissionsConfig[$resourceKey]); if ($isCustom) { // Mark custom permission as granted if (isset($customPermissionsGrouped[$resourceLabel])) { foreach ($customPermissionsGrouped[$resourceLabel] as $key => &$customPerm) { if ($customPerm['action'] === $action) { $customPerm['granted'] = true; $customPerm['permission_id'] = $permissionsWithIds[$permission] ?? null; break; } } unset($customPerm); // Break the reference to avoid issues } } else { // Mark standard CRUD permission as granted if (isset($groupedPermissions[$resourceLabel])) { if ($action === 'index') { $groupedPermissions[$resourceLabel]['index'] = true; } elseif ($action === 'show') { $groupedPermissions[$resourceLabel]['show'] = true; } elseif (in_array($action, ['create', 'store'])) { $groupedPermissions[$resourceLabel]['create'] = true; } elseif (in_array($action, ['edit', 'update'])) { $groupedPermissions[$resourceLabel]['update'] = true; } elseif ($action === 'destroy') { $groupedPermissions[$resourceLabel]['destroy'] = true; } } } } } // Sort by resource label ksort($groupedPermissions); ksort($customPermissionsGrouped); @endphp @section('content')
Role Details
@can('role.update') Edit @endcan
Role Name {{ $model->name }}
Created: {{ $model->created_at?->format('d/m/Y H:i') ?? '-' }} @if ($model->createdBy) by {{ $model->createdBy->name }} @endif
Last Updated: {{ $model->updated_at?->format('d/m/Y H:i') ?? '-' }} @if ($model->updatedBy) by {{ $model->updatedBy->name }} @endif
Basic Permissions
@if (count($groupedPermissions) > 0)
@foreach ($groupedPermissions as $resourceLabel => $permissions) @endforeach
Module View All View Detail Create Update Delete
{{ $resourceLabel }} @if ($permissions['index']) @else @endif @if ($permissions['show']) @else @endif @if ($permissions['create']) @else @endif @if ($permissions['update']) @else @endif @if ($permissions['destroy']) @else @endif
@endif
@php // Filter to only show modules that have at least one granted custom permission $grantedCustomPermissions = collect($customPermissionsGrouped) ->map(function($customPerms) { $filtered = collect($customPerms)->filter(fn($perm) => $perm['granted']); // Remove duplicates by permission action $unique = $filtered->unique('action')->values()->all(); return $unique; }) ->filter(fn($perms) => count($perms) > 0); @endphp @if ($grantedCustomPermissions->count() > 0)
Custom Permissions
@foreach ($grantedCustomPermissions as $resourceLabel => $customPerms) @endforeach
Module Custom Actions
{{ $resourceLabel }} @foreach ($customPerms as $customPerm) {{ $customPerm['label'] }} @endforeach
@endif
@endsection