label('编辑'), ]; } public function infolist(Infolist $infolist): Infolist { return $infolist ->schema([ Infolists\Components\Section::make('基本信息') ->schema([ Infolists\Components\TextEntry::make('name') ->label('用户名称'), Infolists\Components\TextEntry::make('email') ->label('邮箱'), 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('roles.name') ->label('已分配角色') ->badge() ->color(fn (string $state): string => match ($state) { 'super-admin' => 'danger', 'admin' => 'warning', 'user' => 'success', default => 'gray', }) ->formatStateUsing(fn (string $state): string => match ($state) { 'super-admin' => '超级管理员', 'admin' => '管理员', 'user' => '普通用户', default => $state, }) ->placeholder('未分配角色'), ]), Infolists\Components\Section::make('分组信息') ->schema([ Infolists\Components\TextEntry::make('groups.name') ->label('所属分组') ->badge() ->placeholder('未加入任何分组'), ]), Infolists\Components\Section::make('权限详情') ->description('显示用户拥有的所有权限(包括角色权限和直接权限)') ->schema([ Infolists\Components\TextEntry::make('all_permissions') ->label('所有权限') ->state(function ($record) { // 获取所有权限(角色权限 + 直接权限) $permissions = $record->getAllPermissions(); if ($permissions->isEmpty()) { return '无权限'; } // 按模块分组 $grouped = $permissions->groupBy(function ($permission) { return explode('.', $permission->name)[0]; }); $moduleNames = [ 'document' => '文档管理', 'sop' => 'SOP模板', 'terminal' => '终端管理', 'user' => '用户管理', 'role' => '角色管理', 'group' => '分组管理', 'system' => '系统设置', 'activity' => '操作日志', ]; $actionNames = [ 'view' => '查看', 'create' => '创建', 'update' => '编辑', 'delete' => '删除', 'export' => '导出', 'import' => '导入', 'publish' => '发布', 'archive' => '归档', 'download' => '下载', 'sync' => '同步', ]; $result = []; foreach ($grouped as $module => $perms) { $moduleName = $moduleNames[$module] ?? $module; $actions = $perms->map(function ($perm) use ($actionNames) { $parts = explode('.', $perm->name); $action = $parts[1] ?? ''; return $actionNames[$action] ?? $action; })->join('、'); $result[] = "{$moduleName}:{$actions}"; } return implode("\n", $result); }) ->columnSpanFull() ->placeholder('无权限'), Infolists\Components\TextEntry::make('direct_permissions') ->label('直接权限') ->state(function ($record) { $permissions = $record->permissions; if ($permissions->isEmpty()) { return '无直接权限'; } $actionNames = [ 'view' => '查看', 'create' => '创建', 'update' => '编辑', 'delete' => '删除', 'export' => '导出', 'import' => '导入', 'publish' => '发布', 'archive' => '归档', 'download' => '下载', 'sync' => '同步', ]; return $permissions->map(function ($perm) use ($actionNames) { $parts = explode('.', $perm->name); $action = $parts[1] ?? ''; return $actionNames[$action] ?? $action; })->join('、'); }) ->badge() ->color('info') ->columnSpanFull() ->placeholder('无直接权限'), ]), ]); } }