Files
KnowledgeBase/app/Filament/Resources/RoleResource/Pages/ViewRole.php
lizhuoran 788101d21f feat(权限): 优化角色和用户详情页的权限列表显示
- ViewRole 页面优化:
  - 使用 HTML 格式按模块分组显示权限
  - 每个模块使用 Emoji 图标标识(📄 文档管理、⚙️ 系统设置等)
  - 模块名称加粗显示,权限操作用顿号分隔
  - 模块之间使用空行分隔,更加清晰
  - super-admin 角色显示特殊说明

- ViewUser 页面优化:
  - 所有权限:显示用户拥有的全部权限(角色+直接)
  - 直接权限:单独显示直接分配的权限
  - 同样使用 Emoji 图标和分组显示
  - 使用 HTML 格式提升可读性

优化后的显示效果:
📄 文档管理:查看详情、创建、编辑、删除、下载

⚙️ 系统设置:查看详情、编辑

更加直观、易读,用户可以快速了解权限分布情况
2026-03-11 10:21:01 +08:00

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' => '🖥️ 终端管理',
'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[] = "<strong>{$moduleName}</strong>{$actions}";
}
return implode('<br><br>', $result);
})
->html()
->columnSpanFull(),
])
->description(fn ($record) =>
$record->name === 'super-admin'
? 'super-admin 角色拥有系统所有权限'
: '该角色拥有以下权限'
)
->collapsible(),
]);
}
}