From bcffdaf172b98c38b2bb5d89cb411dcaff4c77e8 Mon Sep 17 00:00:00 2001 From: shinya Date: Fri, 15 Aug 2025 12:39:26 +0800 Subject: [PATCH] feat: limit config file edit to owner --- src/app/admin/page.tsx | 47 ++++++++++++++----- src/app/api/admin/config_file/route.ts | 12 ++--- .../admin/config_subscription/fetch/route.ts | 19 +++++++- src/app/api/cron/route.ts | 4 +- src/app/api/search/resources/route.ts | 2 + src/app/api/server-config/route.ts | 2 +- src/app/search/page.tsx | 2 +- src/components/SearchResultFilter.tsx | 2 +- src/components/VideoCard.tsx | 2 +- 9 files changed, 66 insertions(+), 26 deletions(-) diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index d75791c..b2aad91 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -1282,7 +1282,7 @@ const CategoryConfig = ({ }; // 新增配置文件组件 -const ConfigFileComponent = ({ config, refreshConfig }: { config: AdminConfig | null; refreshConfig: () => Promise }) => { +const ConfigFileComponent = ({ config, refreshConfig, role }: { config: AdminConfig | null; refreshConfig: () => Promise; role: 'owner' | 'admin' | null }) => { const [configContent, setConfigContent] = useState(''); const [saving, setSaving] = useState(false); const [subscriptionUrl, setSubscriptionUrl] = useState(''); @@ -1290,6 +1290,9 @@ const ConfigFileComponent = ({ config, refreshConfig }: { config: AdminConfig | const [fetching, setFetching] = useState(false); const [lastCheckTime, setLastCheckTime] = useState(''); + // 检查是否为站长 + const isOwner = role === 'owner'; + useEffect(() => { if (config?.ConfigFile) { setConfigContent(config.ConfigFile); @@ -1381,8 +1384,22 @@ const ConfigFileComponent = ({ config, refreshConfig }: { config: AdminConfig | return (
+ {/* 非站长用户权限提示 */} + {!isOwner && ( +
+
+
+ ! +
+

+ 配置文件模块仅站长可编辑,您只能查看配置内容 +

+
+
+ )} + {/* 配置订阅区域 */} -
+

配置订阅 @@ -1403,7 +1420,8 @@ const ConfigFileComponent = ({ config, refreshConfig }: { config: AdminConfig | value={subscriptionUrl} onChange={(e) => setSubscriptionUrl(e.target.value)} placeholder='https://example.com/config.json' - className='w-full px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-green-500 focus:border-transparent transition-all duration-200 shadow-sm hover:border-gray-400 dark:hover:border-gray-500' + disabled={!isOwner} + className={`w-full px-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-green-500 focus:border-transparent transition-all duration-200 shadow-sm hover:border-gray-400 dark:hover:border-gray-500 ${!isOwner ? 'cursor-not-allowed bg-gray-100 dark:bg-gray-700' : ''}`} />

输入配置文件的订阅地址,要求 JSON 格式,且使用 Base58 编码 @@ -1414,8 +1432,8 @@ const ConfigFileComponent = ({ config, refreshConfig }: { config: AdminConfig |