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'), ]), ]); }