'permissions', 'title' => '功能&权限', 'sections' => [ 'login' => [ 'key' => 'login', 'title' => '登录权限', 'version' => '1.0.0', 'option_key' => 'aksrt_captcha_config', 'groups' => [ ['key' => 'basic', 'title' => '基础开关', 'fields' => [ ['key' => 'enabled', 'label' => '启用人机验证', 'type' => 'switch', 'default' => false], ['key' => 'active_provider', 'label' => '当前服务商', 'type' => 'radio', 'default' => '', 'dependsOn' => ['key' => 'enabled', 'value' => true], 'options' => [ ['label' => '关闭', 'value' => ''], ['label' => '腾讯云 Captcha', 'value' => 'tencent'], ['label' => '阿里云 CAPTCHA 2.0', 'value' => 'aliyun'], ['label' => 'Cloudflare Turnstile', 'value' => 'cloudflare'], ['label' => '极验 GeeTest', 'value' => 'geetest'], ]], ['key' => 'mode', 'label' => '触发模式', 'type' => 'radio', 'default' => 'always', 'dependsOn' => ['key' => 'enabled', 'value' => true], 'options' => [ ['label' => '始终显示', 'value' => 'always'], ]], ['key' => 'disabled_scenarios', 'label' => '停用场景', 'type' => 'checkbox', 'default' => [], 'dependsOn' => ['key' => 'enabled', 'value' => true], 'options' => [ ['label' => '发表评论', 'value' => 'comment'], ['label' => '用户登录', 'value' => 'login'], ['label' => '用户注册', 'value' => 'register'], ['label' => '绑定第三方', 'value' => 'bind'], ['label' => '找回密码', 'value' => 'lostpassword'], ['label' => '修改密码', 'value' => 'change_password'], ['label' => '更改邮箱', 'value' => 'change_email'], ['label' => '邮箱验证', 'value' => 'verify_email'], ['label' => '资源下载', 'value' => 'download'], ['label' => '每日签到', 'value' => 'signin'], ]], ]], ['key' => 'providers', 'title' => '服务商配置', 'fields' => [ ['key' => 'tencent', 'label' => '腾讯云配置', 'type' => 'custom', 'default' => [], 'sanitize_type' => 'array'], ['key' => 'aliyun', 'label' => '阿里云配置', 'type' => 'custom', 'default' => [], 'sanitize_type' => 'array'], ['key' => 'cloudflare', 'label' => 'Cloudflare 配置', 'type' => 'custom', 'default' => [], 'sanitize_type' => 'array'], ['key' => 'geetest', 'label' => '极验配置', 'type' => 'custom', 'default' => [], 'sanitize_type' => 'array'], ]], ], ], 'comment' => [ 'key' => 'comment', 'title' => '评论权限', 'version' => '1.0.0', 'option_key' => 'aksrt_settings', 'groups' => [ ['key' => 'basic', 'title' => '基础权限', 'fields' => [ ['key' => 'comment_enabled', 'label' => '全局评论开关', 'type' => 'switch', 'default' => true, 'help' => '关闭后全站禁用评论功能'], ['key' => 'comment_guest_allowed', 'label' => '允许游客评论', 'type' => 'switch', 'default' => true], ['key' => 'comment_min_length', 'label' => '评论最少字数', 'type' => 'number', 'default' => 2, 'min' => 0, 'max' => 100], ['key' => 'comment_max_length', 'label' => '评论最多字数', 'type' => 'number', 'default' => 1000, 'min' => 50, 'max' => 10000], ['key' => 'comment_cool_down_seconds', 'label' => '评论冷却时间(秒)', 'type' => 'number', 'default' => 15, 'min' => 0, 'max' => 300], ['key' => 'comment_max_links', 'label' => '最大链接数', 'type' => 'number', 'default' => 2, 'min' => 0, 'max' => 10], ['key' => 'comment_max_images', 'label' => '最大图片数', 'type' => 'number', 'default' => 3, 'min' => 0, 'max' => 20], ]], ['key' => 'sensitive', 'title' => '敏感词', 'fields' => [ ['key' => 'comment_sensitive_words', 'label' => '敏感词列表', 'type' => 'textarea', 'default' => ''], ['key' => 'comment_sensitive_action', 'label' => '敏感词处理', 'type' => 'radio', 'default' => 'reject', 'options' => [ ['label' => '拒绝评论', 'value' => 'reject'], ['label' => '替换为***', 'value' => 'replace'], ['label' => '转入审核', 'value' => 'pending'], ]], ['key' => 'comment_sensitive_log', 'label' => '记录敏感词日志', 'type' => 'switch', 'default' => true], ]], ['key' => 'anti-spam', 'title' => '反垃圾', 'fields' => [ ['key' => 'comment_link_filter', 'label' => '链接过滤', 'type' => 'switch', 'default' => true, 'help' => '评论包含链接自动进入审核'], ['key' => 'comment_flood_protection', 'label' => '防刷评论', 'type' => 'switch', 'default' => true], ['key' => 'comment_flood_interval', 'label' => '防刷间隔(秒)', 'type' => 'number', 'default' => 10, 'min' => 3, 'max' => 60], ['key' => 'comment_max_per_hour', 'label' => '每小时最大评论数', 'type' => 'number', 'default' => 20, 'min' => 1, 'max' => 200], ]], ['key' => 'display', 'title' => '展示设置', 'fields' => [ ['key' => 'comment_avatar_required', 'label' => '要求设置头像', 'type' => 'switch', 'default' => false], ['key' => 'comment_nickname_required', 'label' => '要求填写昵称', 'type' => 'switch', 'default' => true], ['key' => 'comment_email_required', 'label' => '要求填写邮箱', 'type' => 'switch', 'default' => true], ]], ], ], 'attachment' => [ 'key' => 'attachment', 'title' => '附件权限', 'version' => '1.0.0', 'option_key' => 'aksrt_settings', 'groups' => [ ['key' => 'profile', 'title' => '头像与封面', 'fields' => [ ['key' => 'allow_avatar_upload', 'label' => '允许用户上传头像', 'type' => 'switch', 'default' => true], ['key' => 'allow_cover_upload', 'label' => '允许用户上传封面图', 'type' => 'switch', 'default' => true], ['key' => 'allow_background_upload', 'label' => '允许用户上传背景图', 'type' => 'switch', 'default' => false], ['key' => 'avatar_max_size', 'label' => '头像/封面大小上限 (MB)', 'type' => 'number', 'default' => 2, 'min' => 1, 'max' => 10], ]], ['key' => 'content', 'title' => '内容上传', 'fields' => [ ['key' => 'allow_submit_images', 'label' => '允许投稿插入图片', 'type' => 'switch', 'default' => true], ['key' => 'submit_image_max_size', 'label' => '投稿图片大小上限 (MB)', 'type' => 'number', 'default' => 5, 'min' => 1, 'max' => 20], ['key' => 'allow_comment_images', 'label' => '允许评论插入图片', 'type' => 'switch', 'default' => false], ['key' => 'comment_image_max_size', 'label' => '评论图片大小上限 (MB)', 'type' => 'number', 'default' => 2, 'min' => 1, 'max' => 10], ]], ['key' => 'resource', 'title' => '资源附件', 'fields' => [ ['key' => 'allow_resource_upload', 'label' => '允许资源附件上传', 'type' => 'switch', 'default' => true], ['key' => 'resource_max_size', 'label' => '资源附件大小上限 (MB)', 'type' => 'number', 'default' => 50, 'min' => 1, 'max' => 200], ]], ], ], 'download' => [ 'key' => 'download', 'title' => '下载权限', 'version' => '1.0.0', 'option_key' => 'aksrt_settings', 'groups' => [ ['key' => 'basic', 'title' => '下载设置', 'fields' => [ ['key' => 'download_require_login', 'label' => '下载需要登录', 'type' => 'switch', 'default' => true], ['key' => 'download_require_credits', 'label' => '下载需要积分', 'type' => 'switch', 'default' => false], ['key' => 'download_credits_cost', 'label' => '下载所需积分', 'type' => 'number', 'default' => 1, 'min' => 1, 'max' => 100], ['key' => 'download_daily_limit', 'label' => '每日下载限制', 'type' => 'number', 'default' => 0, 'min' => 0, 'help' => '0为不限制'], ['key' => 'download_link_expire', 'label' => '下载链接有效期(分钟)', 'type' => 'number', 'default' => 30, 'min' => 5, 'max' => 1440], ['key' => 'download_speed_limit', 'label' => '下载速度限制(KB/s)', 'type' => 'number', 'default' => 0, 'min' => 0, 'help' => '0为不限制'], ]], ['key' => 'vip', 'title' => 'VIP 特权', 'fields' => [ ['key' => 'download_vip_free', 'label' => 'VIP 免费下载', 'type' => 'switch', 'default' => false], ['key' => 'download_vip_daily_extra', 'label' => 'VIP每日额外次数', 'type' => 'number', 'default' => 10, 'min' => 0, 'max' => 999], ]], ['key' => 'role', 'title' => '角色权限', 'fields' => [ ['key' => 'download_role_limits', 'label' => '角色下载限制', 'type' => 'textarea', 'default' => '', 'help' => '格式: role|daily_limit,每行一条'], ['key' => 'download_role_size', 'label' => '角色文件大小限制', 'type' => 'textarea', 'default' => '', 'help' => '格式: role|max_size_mb,每行一条'], ]], ['key' => 'captcha', 'title' => '安全设置', 'fields' => [ ['key' => 'download_captcha', 'label' => '下载需要验证码', 'type' => 'switch', 'default' => false], ['key' => 'download_ip_limit', 'label' => 'IP下载限制', 'type' => 'number', 'default' => 0, 'min' => 0, 'help' => '同一IP每小时最大下载次数,0为不限制'], ]], ], ], 'moderation' => [ 'key' => 'moderation', 'title' => '内容审核', 'version' => '1.0.0', 'option_key' => 'aksrt_moderation_config', 'groups' => [ ['key' => 'basic', 'title' => '审核总开关', 'fields' => [ ['key' => 'enabled', 'label' => '启用审核系统', 'type' => 'switch', 'default' => false], ]], ['key' => 'akismet', 'title' => 'Akismet', 'fields' => [ ['key' => 'akismet_enabled', 'label' => '启用 Akismet', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'enabled', 'value' => true]], ['key' => 'akismet_site_url', 'label' => 'Site URL', 'type' => 'input', 'default' => '', 'dependsOn' => ['key' => 'akismet_enabled', 'value' => true]], ['key' => 'akismet_blog_lang', 'label' => '博客语言', 'type' => 'input', 'default' => 'zh-CN', 'dependsOn' => ['key' => 'akismet_enabled', 'value' => true]], ['key' => 'akismet_api_key', 'label' => 'API Key', 'type' => 'input', 'inputType' => 'password', 'default' => '', 'dependsOn' => ['key' => 'akismet_enabled', 'value' => true]], ]], ['key' => 'ai', 'title' => 'AI 审核', 'fields' => [ ['key' => 'ai_enabled', 'label' => '启用 AI 审核', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'enabled', 'value' => true]], ['key' => 'ai_api_hint', 'label' => '审核 API 配置', 'type' => 'notice', 'alertType' => 'info', 'alertContent' => 'API 接入(百度/阿里云等)在「扩展 → API内容审核」中统一配置,此处仅控制审核范围和策略。', 'dependsOn' => ['key' => 'ai_enabled', 'value' => true]], ['key' => 'ai_moderate_comments', 'label' => '用户评论', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'ai_enabled', 'value' => true]], ['key' => 'ai_moderate_background', 'label' => '用户资料背景', 'type' => 'switch', 'default' => true, 'dependsOn' => ['key' => 'ai_enabled', 'value' => true]], ['key' => 'auto_approve_low_risk', 'label' => '低风险自动通过', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'ai_enabled', 'value' => true]], ['key' => 'auto_reject_high_risk', 'label' => '高风险自动拒绝', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'ai_enabled', 'value' => true]], ['key' => 'low_risk_max_score', 'label' => '低风险上限', 'type' => 'number', 'default' => 35, 'min' => 0, 'max' => 100, 'dependsOn' => ['key' => 'ai_enabled', 'value' => true]], ['key' => 'high_risk_min_score', 'label' => '高风险下限', 'type' => 'number', 'default' => 80, 'min' => 0, 'max' => 100, 'dependsOn' => ['key' => 'ai_enabled', 'value' => true]], ]], ['key' => 'keywords', 'title' => '关键词拦截', 'fields' => [ ['key' => 'blocked_keywords', 'label' => '屏蔽关键词列表', 'type' => 'textarea', 'default' => '', 'rows' => 4, 'dependsOn' => ['key' => 'enabled', 'value' => true]], ]], ['key' => 'rate-limit', 'title' => '频率限制', 'fields' => [ ['key' => 'rate_limit_enabled', 'label' => '启用频率限制', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'enabled', 'value' => true]], ['key' => 'rate_limit_min_interval', 'label' => '最小间隔(秒)', 'type' => 'number', 'default' => 8, 'min' => 1, 'max' => 300, 'dependsOn' => ['key' => 'rate_limit_enabled', 'value' => true]], ['key' => 'rate_limit_max_per_hour', 'label' => '每小时上限', 'type' => 'number', 'default' => 15, 'min' => 1, 'max' => 200, 'dependsOn' => ['key' => 'rate_limit_enabled', 'value' => true]], ]], ['key' => 'geoip', 'title' => 'GeoIP 拦截', 'fields' => [ ['key' => 'geoip_enabled', 'label' => '启用 GeoIP 拦截', 'type' => 'switch', 'default' => false, 'dependsOn' => ['key' => 'enabled', 'value' => true]], ['key' => 'geoip_hint', 'label' => 'IP 数据源', 'type' => 'notice', 'alertType' => 'info', 'alertContent' => '复用「扩展 → IP归属地」中配置的数据源和 API Key。', 'dependsOn' => ['key' => 'geoip_enabled', 'value' => true]], ['key' => 'geoip_block_countries', 'label' => '屏蔽国家/地区', 'type' => 'custom', 'default' => [], 'sanitize_type' => 'array', 'dependsOn' => ['key' => 'geoip_enabled', 'value' => true]], ]], ], ], 'capabilities' => [ 'key' => 'capabilities', 'title' => '基本权限', 'version' => '1.0.0', 'option_key' => 'aksrt_settings', // Live editing uses PermissionsCapabilities.vue + /permissions/capabilities. // Keep an empty schema contract here so domain build() does not fatally call // a missing build_cap_matrix_groups() helper when loading login/moderation. 'groups' => [], ], ], ]; } }