관리자 "전체 재생성"을 큐(Full 모드)로 던지고 진행상황을 SEO 탭에서 확인한다. Reverb ON 이면 방송 채널 구독으로 실시간 갱신, OFF 면 상태 API 폴링으로 폴백한다. - SitemapProgress 진행상황 스토어(queued→running→writing→completed/failed, 캐시 TTL 3600, 방송 스로틀) + SitemapManager.getStatus 확장(progress + realtime_enabled) - GET /api/admin/seo/sitemap/status(core.settings.read) 신규 - 관리자 재생성을 항상 Full 모드로 큐잉 + 진행률 기록, Job 최종 실패 시 progress=failed 고정 - core.admin.seo.sitemap 방송 채널 인증(core.settings.read) - SEO 탭 진행상황 UI(상태 배지/단계/누적 URL/실시간·폴링 안내) + 폴링 분기 - 재생성 중 누적 URL 표기(replaceAllForContributor 삽입 건수 반환 — count 쿼리 없이 스트림 누적) - ja 언어팩 진행상황 UI 번역 동기화
40 lines
1.6 KiB
PHP
40 lines
1.6 KiB
PHP
<?php
|
|
|
|
use Illuminate\Support\Facades\Broadcast;
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Broadcast Channels
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| 여기에서 애플리케이션이 지원하는 모든 이벤트 브로드캐스팅 채널을 등록합니다.
|
|
| 주어진 채널 인증 콜백은 현재 인증된 사용자가 채널을 청취할 수 있는지
|
|
| 여부를 결정하는 데 사용됩니다.
|
|
|
|
|
| 코어 채널 네이밍: core.{역할}.{리소스}.{파라미터}
|
|
| 모듈 채널: module.{identifier}.* (ModuleManager 자동 등록)
|
|
| 플러그인 채널: plugin.{identifier}.* (PluginManager 자동 등록)
|
|
|
|
|
*/
|
|
|
|
Broadcast::channel('App.Models.User.{id}', function ($user, $id) {
|
|
return (int) $user->id === (int) $id;
|
|
});
|
|
|
|
// 관리자 대시보드 채널 - core.dashboard.read 권한 필요
|
|
Broadcast::channel('core.admin.dashboard', function ($user) {
|
|
return $user->hasPermission('core.dashboard.read');
|
|
});
|
|
|
|
// 관리자 Sitemap 재생성 진행상황 채널 - core.settings.read 권한 필요 (SEO 탭 읽기 권한과 일치)
|
|
Broadcast::channel('core.admin.seo.sitemap', function ($user) {
|
|
return $user->hasPermission('core.settings.read');
|
|
});
|
|
|
|
// 사용자별 알림 채널 - UUID 기반 (User ID 노출 방지)
|
|
// core.user-notifications.read (type=user) 권한 필요
|
|
Broadcast::channel('core.user.notifications.{uuid}', function ($user, $uuid) {
|
|
return $user->uuid === $uuid
|
|
&& $user->hasPermission('core.user-notifications.read', \App\Enums\PermissionType::User);
|
|
});
|