@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 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)
| Module |
View All |
View Detail |
Create |
Update |
Delete |
@foreach ($groupedPermissions as $resourceLabel => $permissions)
| {{ $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
|
@endforeach
@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
| Module |
Custom Actions |
@foreach ($grantedCustomPermissions as $resourceLabel => $customPerms)
| {{ $resourceLabel }} |
@foreach ($customPerms as $customPerm)
✔ {{ $customPerm['label'] }}
@endforeach
|
@endforeach
@endif
@endsection