From 788101d21f4b358b964fd3019efe1598dbecf6cf Mon Sep 17 00:00:00 2001 From: lizhuoran <625237490@qq.com> Date: Wed, 11 Mar 2026 10:21:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=9D=83=E9=99=90):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=92=8C=E7=94=A8=E6=88=B7=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E9=A1=B5=E7=9A=84=E6=9D=83=E9=99=90=E5=88=97=E8=A1=A8=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ViewRole 页面优化: - 使用 HTML 格式按模块分组显示权限 - 每个模块使用 Emoji 图标标识(📄 文档管理、⚙️ 系统设置等) - 模块名称加粗显示,权限操作用顿号分隔 - 模块之间使用空行分隔,更加清晰 - super-admin 角色显示特殊说明 - ViewUser 页面优化: - 所有权限:显示用户拥有的全部权限(角色+直接) - 直接权限:单独显示直接分配的权限 - 同样使用 Emoji 图标和分组显示 - 使用 HTML 格式提升可读性 优化后的显示效果: 📄 文档管理:查看详情、创建、编辑、删除、下载 ⚙️ 系统设置:查看详情、编辑 更加直观、易读,用户可以快速了解权限分布情况 --- .../Resources/RoleResource/Pages/ViewRole.php | 92 +++++++++++-------- .../Resources/UserResource/Pages/ViewUser.php | 90 +++++++++++------- 2 files changed, 109 insertions(+), 73 deletions(-) diff --git a/app/Filament/Resources/RoleResource/Pages/ViewRole.php b/app/Filament/Resources/RoleResource/Pages/ViewRole.php index fe9d887..c781b64 100644 --- a/app/Filament/Resources/RoleResource/Pages/ViewRole.php +++ b/app/Filament/Resources/RoleResource/Pages/ViewRole.php @@ -65,51 +65,65 @@ class ViewRole extends ViewRecord Infolists\Components\Section::make('权限列表') ->schema([ - Infolists\Components\RepeatableEntry::make('permissions') + Infolists\Components\TextEntry::make('grouped_permissions') ->label('') - ->schema([ - Infolists\Components\TextEntry::make('name') - ->label('权限') - ->badge() - ->formatStateUsing(function (string $state): string { - // 格式化权限名称 - $parts = explode('.', $state); - $module = $parts[0] ?? ''; - $action = $parts[1] ?? ''; + ->getStateUsing(function ($record) { + // 按模块分组权限 + $permissions = $record->permissions; + + if ($permissions->isEmpty()) { + return '该角色暂无权限'; + } - $moduleNames = [ - 'document' => '文档管理', - 'system-setting' => '系统设置', - 'activity-log' => '操作日志', - 'terminal' => '终端管理', - 'sop-template' => 'SOP模板', - 'group' => '分组管理', - 'user' => '用户管理', - 'role' => '角色管理', - ]; + $moduleNames = [ + 'document' => '📄 文档管理', + 'system-setting' => '⚙️ 系统设置', + 'activity-log' => '📋 操作日志', + 'terminal' => '🖥️ 终端管理', + 'sop-template' => '📝 SOP模板', + 'group' => '👥 分组管理', + 'user' => '👤 用户管理', + 'role' => '🛡️ 角色管理', + ]; - $actionNames = [ - 'viewAny' => '查看列表', - 'view' => '查看详情', - 'create' => '创建', - 'update' => '编辑', - 'delete' => '删除', - 'download' => '下载', - 'export' => '导出', - 'sync' => '同步', - 'publish' => '发布', - 'archive' => '归档', - ]; + $actionNames = [ + 'viewAny' => '查看列表', + 'view' => '查看详情', + 'create' => '创建', + 'update' => '编辑', + 'delete' => '删除', + 'download' => '下载', + 'export' => '导出', + 'sync' => '同步', + 'publish' => '发布', + 'archive' => '归档', + ]; - $moduleName = $moduleNames[$module] ?? $module; - $actionName = $actionNames[$action] ?? $action; + $grouped = $permissions->groupBy(function ($permission) { + return explode('.', $permission->name)[0]; + }); - return "{$moduleName} - {$actionName}"; - }), - ]) - ->columns(3) - ->grid(3), + $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(), ]); } diff --git a/app/Filament/Resources/UserResource/Pages/ViewUser.php b/app/Filament/Resources/UserResource/Pages/ViewUser.php index 5ad5d2f..c682b65 100644 --- a/app/Filament/Resources/UserResource/Pages/ViewUser.php +++ b/app/Filament/Resources/UserResource/Pages/ViewUser.php @@ -72,12 +72,12 @@ class ViewUser extends ViewRecord ->schema([ Infolists\Components\TextEntry::make('all_permissions') ->label('所有权限') - ->state(function ($record) { + ->getStateUsing(function ($record) { // 获取所有权限(角色权限 + 直接权限) $permissions = $record->getAllPermissions(); if ($permissions->isEmpty()) { - return '无权限'; + return '该用户暂无权限'; } // 按模块分组 @@ -86,77 +86,99 @@ class ViewUser extends ViewRecord }); $moduleNames = [ - 'document' => '文档管理', - 'sop' => 'SOP模板', - 'terminal' => '终端管理', - 'user' => '用户管理', - 'role' => '角色管理', - 'group' => '分组管理', - 'system' => '系统设置', - 'activity' => '操作日志', + 'document' => '📄 文档管理', + 'system-setting' => '⚙️ 系统设置', + 'activity-log' => '📋 操作日志', + 'terminal' => '🖥️ 终端管理', + 'sop-template' => '📝 SOP模板', + 'group' => '👥 分组管理', + 'user' => '👤 用户管理', + 'role' => '🛡️ 角色管理', ]; $actionNames = [ - 'view' => '查看', + 'viewAny' => '查看列表', + 'view' => '查看详情', 'create' => '创建', 'update' => '编辑', 'delete' => '删除', + 'download' => '下载', 'export' => '导出', - 'import' => '导入', + 'sync' => '同步', '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] ?? ''; + $action = explode('.', $perm->name)[1] ?? ''; return $actionNames[$action] ?? $action; })->join('、'); - $result[] = "{$moduleName}:{$actions}"; + + $result[] = "{$moduleName}:{$actions}"; } - return implode("\n", $result); + return implode('

', $result); }) - ->columnSpanFull() - ->placeholder('无权限'), + ->html() + ->columnSpanFull(), Infolists\Components\TextEntry::make('direct_permissions') - ->label('直接权限') - ->state(function ($record) { + ->label('直接权限(仅显示直接分配的权限)') + ->getStateUsing(function ($record) { $permissions = $record->permissions; if ($permissions->isEmpty()) { return '无直接权限'; } + // 按模块分组 + $grouped = $permissions->groupBy(function ($permission) { + return explode('.', $permission->name)[0]; + }); + + $moduleNames = [ + 'document' => '📄 文档管理', + 'system-setting' => '⚙️ 系统设置', + 'activity-log' => '📋 操作日志', + 'terminal' => '🖥️ 终端管理', + 'sop-template' => '📝 SOP模板', + 'group' => '👥 分组管理', + 'user' => '👤 用户管理', + 'role' => '🛡️ 角色管理', + ]; + $actionNames = [ - 'view' => '查看', + 'viewAny' => '查看列表', + 'view' => '查看详情', 'create' => '创建', 'update' => '编辑', 'delete' => '删除', + 'download' => '下载', 'export' => '导出', - 'import' => '导入', + 'sync' => '同步', 'publish' => '发布', 'archive' => '归档', - 'download' => '下载', - 'sync' => '同步', ]; - return $permissions->map(function ($perm) use ($actionNames) { - $parts = explode('.', $perm->name); - $action = $parts[1] ?? ''; - return $actionNames[$action] ?? $action; - })->join('、'); + $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); }) - ->badge() - ->color('info') + ->html() ->columnSpanFull() - ->placeholder('无直接权限'), + ->color('info'), ]), ]); }