Files
KnowledgeBase/app/Filament/Resources/RoleResource/Pages/ViewRole.php

131 lines
5.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Filament\Resources\RoleResource\Pages;
use App\Filament\Resources\RoleResource;
use Filament\Actions;
use Filament\Resources\Pages\ViewRecord;
use Filament\Infolists;
use Filament\Infolists\Infolist;
class ViewRole extends ViewRecord
{
protected static string $resource = RoleResource::class;
protected function getHeaderActions(): array
{
return [
Actions\EditAction::make()
->label('编辑')
->visible(fn (): bool => $this->record->name !== 'super-admin'),
];
}
public function infolist(Infolist $infolist): Infolist
{
return $infolist
->schema([
Infolists\Components\Section::make('角色信息')
->schema([
Infolists\Components\TextEntry::make('name')
->label('角色标识')
->badge()
->color(fn (string $state): string => match ($state) {
'super-admin' => 'danger',
'admin' => 'warning',
'user' => 'success',
default => 'gray',
}),
Infolists\Components\TextEntry::make('guard_name')
->label('守卫')
->badge(),
Infolists\Components\TextEntry::make('permissions_count')
->label('权限数量')
->getStateUsing(fn ($record) => $record->permissions()->count())
->badge()
->color('info'),
Infolists\Components\TextEntry::make('users_count')
->label('用户数量')
->getStateUsing(fn ($record) => $record->users()->count())
->badge()
->color('success'),
Infolists\Components\TextEntry::make('created_at')
->label('创建时间')
->dateTime('Y-m-d H:i:s'),
Infolists\Components\TextEntry::make('updated_at')
->label('更新时间')
->dateTime('Y-m-d H:i:s'),
])
->columns(2),
Infolists\Components\Section::make('权限列表')
->schema([
Infolists\Components\TextEntry::make('grouped_permissions')
->label('')
->getStateUsing(function ($record) {
// 按模块分组权限
$permissions = $record->permissions;
if ($permissions->isEmpty()) {
return '该角色暂无权限';
}
$moduleNames = [
'document' => '📄 文档管理',
'system-setting' => '⚙️ 系统设置',
'activity-log' => '📋 操作日志',
'terminal' => '🖥️ 终端管理',
'guide' => '📖 操作指引',
'group' => '👥 分组管理',
'user' => '👤 用户管理',
'role' => '🛡️ 角色管理',
];
$actionNames = [
'viewAny' => '查看列表',
'view' => '查看详情',
'create' => '创建',
'update' => '编辑',
'delete' => '删除',
'download' => '下载',
'export' => '导出',
'sync' => '同步',
'publish' => '发布',
'archive' => '归档',
];
$grouped = $permissions->groupBy(function ($permission) {
return explode('.', $permission->name)[0];
});
$result = [];
foreach ($grouped as $module => $perms) {
$moduleName = $moduleNames[$module] ?? $module;
$actions = $perms->map(function ($perm) use ($actionNames) {
$action = explode('.', $perm->name)[1] ?? '';
return $actionNames[$action] ?? $action;
})->join('、');
$result[] = "<strong>{$moduleName}</strong>{$actions}";
}
return implode('<br><br>', $result);
})
->html()
->columnSpanFull(),
])
->description(fn ($record) =>
$record->name === 'super-admin'
? 'super-admin 角色拥有系统所有权限'
: '该角色拥有以下权限'
)
->collapsible(),
]);
}
}