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' => '🖥️ 终端管理', 'sop-template' => '📝 SOP模板', '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[] = "{$moduleName}:{$actions}"; } return implode('

', $result); }) ->html() ->columnSpanFull(), ]) ->description(fn ($record) => $record->name === 'super-admin' ? 'super-admin 角色拥有系统所有权限' : '该角色拥有以下权限' ) ->collapsible(), ]); } }