refactor: kb & station & terminal

This commit is contained in:
2026-03-23 20:17:17 +08:00
parent 63ea2686e1
commit b74ba1a3f8
81 changed files with 1016 additions and 2492 deletions

View File

@@ -29,14 +29,27 @@ class UserResource extends Resource
protected static ?string $navigationGroup = '权限管理';
/**
* 控制导航菜单是否显示
*/
public static function shouldRegisterNavigation(): bool
{
return auth()->user()?->can('user.view') ?? false;
}
public static function getEloquentQuery(): \Illuminate\Database\Eloquent\Builder
{
$query = parent::getEloquentQuery();
$user = auth()->user();
if ($user && $user->hasStationRestriction()) {
$stationIds = $user->getAccessibleStationIds();
$query->where(function ($q) use ($stationIds) {
$q->whereDoesntHave('stations')
->orWhereHas('stations', fn ($sq) => $sq->whereIn('stations.id', $stationIds));
});
}
return $query;
}
/**
* 获取权限分组标签页
*/
@@ -49,7 +62,6 @@ class UserResource extends Resource
'activity-log' => ['name' => '操作日志', 'icon' => 'heroicon-o-clipboard-document-list'],
'terminal' => ['name' => '终端管理', 'icon' => 'heroicon-o-computer-desktop'],
'guide' => ['name' => '操作指引', 'icon' => 'heroicon-o-book-open'],
'group' => ['name' => '分组管理', 'icon' => 'heroicon-o-user-group'],
'user' => ['name' => '用户管理', 'icon' => 'heroicon-o-users'],
'role' => ['name' => '角色管理', 'icon' => 'heroicon-o-shield-check'],
];
@@ -140,15 +152,15 @@ class UserResource extends Resource
])
->columns(2),
Forms\Components\Section::make('分组与角色')
Forms\Components\Section::make('线站与角色')
->schema([
Forms\Components\Select::make('groups')
->label('所属分组')
Forms\Components\Select::make('stations')
->label('关联线站')
->multiple()
->relationship('groups', 'name')
->relationship('stations', 'name')
->preload()
->placeholder('请选择用户所属的分组')
->helperText('用户可以属于多个分组'),
->placeholder('不关联线站则可访问全部资源')
->helperText('关联线站后用户只能看到对应线站的资源'),
Forms\Components\Select::make('roles')
->label('角色')
->multiple()
@@ -172,7 +184,7 @@ class UserResource extends Resource
->dehydrateStateUsing(function ($state, $get) {
// 收集所有模块的权限
$allPermissions = [];
$modules = ['document', 'system-setting', 'activity-log', 'terminal', 'guide', 'group', 'user', 'role'];
$modules = ['document', 'system-setting', 'activity-log', 'terminal', 'guide', 'user', 'role'];
foreach ($modules as $module) {
$modulePermissions = $get("permissions_{$module}") ?? [];
@@ -222,7 +234,7 @@ class UserResource extends Resource
})
->searchable()
->toggleable(),
Tables\Columns\TextColumn::make('groups.name')
Tables\Columns\TextColumn::make('stations.name')
->label('所属分组')
->badge()
->searchable()
@@ -300,7 +312,6 @@ class UserResource extends Resource
public static function getRelations(): array
{
return [
RelationManagers\GroupsRelationManager::class,
];
}