Menu

InnoCMS v0.3.0 发布:插件机制完善、主题工具链、自动角色权限

InnoCMS 2024-06-28 308
InnoCMS v0.3.0 发布:插件机制完善、主题工具链、自动角色权限
v0.3.0 围绕二次开发工具链展开:插件 Settings 声明式配置、artisan vendor:publish 主题发布命令、基于路由扫描的自动角色权限。把插件设置页工作量从 1-2 天降到 1 小时。

距离 v0.2 把多语言内容管理和 Hook 系统定型已经过去三个月。这段时间我们没急着堆功能,而是把精力花在「让二次开发者真正能高效产出」这件事上。今天发布的 InnoCMS v0.3.0 围绕三个核心展开:完善插件机制、补齐主题开发工具链、引入自动角色权限。这一版标志着 InnoCMS 从「能用的 CMS」转向「能被高效定制的 CMS」,本文把每个特性的设计动机、技术实现、使用方式一次讲清楚。

InnoCMS v0.3.0 发布:插件、主题、权限三大核心升级

核心升级一:插件机制从「能跑」到「工程化」

v0.2 的插件系统已经能注册 Hook、加载路由、注入视图,但写一个生产级插件仍然要做大量重复工作 —— 设置页要手写 Blade 表单、字段验证要自己接、配置存储要自己建表。v0.3.0 把这套全部抽象掉,让插件作者只声明「我有哪些配置项」,系统自动完成剩下的工作。

Settings/fields.php:声明式配置

插件目录下新增 Settings/fields.php,结构是字段数组:

// plugins/ArticleShare/Settings/fields.php
return [
    [
        'name'    => 'enabled_platforms',
        'label'   => '启用的平台',
        'type'    => 'checkbox',
        'options' => ['wechat' => '微信', 'weibo' => '微博'],
        'default' => ['wechat', 'weibo'],
    ],
    [
        'name'    => 'button_style',
        'label'   => '按钮样式',
        'type'    => 'select',
        'options' => ['square' => '方形', 'round' => '圆形'],
        'default' => 'round',
    ],
];

系统会自动在后台「插件管理 → ArticleShare → 设置」生成完整表单:包含字段渲染、CSRF 保护、提交接收、值持久化、默认值兜底。插件代码里用 plugin_setting('ArticleShare', 'enabled_platforms') 读取值即可。

支持的字段类型

  • text / textarea —— 单行/多行文本
  • select / checkbox / radio —— 选择类,必须配 options
  • switch —— 开关(布尔值)
  • image —— 调用媒体管理器选图
  • color —— 颜色选择器

这套机制把"插件设置页开发"从平均 200 行代码降到 30 行声明。我们用自己写了 5 个生产插件验证:原本 1-2 天的设置页工作量,现在 1 小时完成。

核心升级二:主题开发工具链

主题一直是 InnoCMS 的设计重点(参见 主题开发实战指南),但 v0.2 之前开发者要手动复制 themes/aurora/ 改名、手动改 config.json、手动建 SCSS 目录结构。v0.3.0 提供标准 Laravel 风格的发布命令一键生成主题骨架:

# 把默认 front 视图发布到 resources/views/vendor/front(用于覆盖式二开)
php artisan vendor:publish \
    --provider="InnoCMS\Front\FrontServiceProvider" \
    --tag=views

# 把 panel 视图发布到 resources/views/vendor/panel(用于后台二开)
php artisan vendor:publish \
    --provider="InnoCMS\Panel\PanelServiceProvider" \
    --tag=views

这条命令对「不想动主题、只想覆盖某几个模板」的场景特别有用 —— Laravel 标准的 vendor view override 机制,被覆盖的模板放在 resources/views/vendor/front/,原主题文件保持原样,升级时不冲突。

主题骨架生成(计划在 v0.4 落地)

v0.3 暴露的是发布命令;下一步会引入更专门的 php artisan inno:make-theme <code>,自动生成完整主题目录(config.json + views/layouts + assets/scss + lang + demo),把"从零开始做一个主题"的门槛进一步降到 30 分钟。这个能力在 v0.4 发布时会配套文档。

核心升级三:自动角色权限

v0.2 的后台角色权限是「手动在每个路由上声明 permission code、手动维护权限项列表」,对插件作者极不友好 —— 插件加一个新路由,要同步在权限表里登记,否则角色配置时看不到这一项。v0.3.0 把这层心智负担完全去掉。

路由扫描自动生成权限项

系统启动时自动扫描所有 /panel/* 路由(含插件路由),按"资源.动作"生成权限 code:

  • panel.articles.index —— 文章列表
  • panel.articles.create —— 新建文章
  • panel.articles.update —— 更新文章
  • panel.plugins.articleshare.index —— 插件 ArticleShare 的列表页

插件路由(plugins/<Code>/Routes/panel.php)挂载到 /panel/plugins/<code>/ 前缀时,自动被纳入扫描。插件作者不需要写任何权限声明代码,加路由就有权限项。

角色配置页

后台「角色管理 → 编辑角色」页面会列出当前所有可用权限项,按模块分组(内容、媒体、插件、系统),勾选即授予。修改后立即生效(基于中间件 AdminAuthenticate 的权限检查)。

这个机制的设计灵感来自 Drupal 的 Permission 系统 —— 让权限成为"路由的派生属性"而不是"独立维护的清单",从根本上避免漂移。

升级到 v0.3.0

已经在 v0.2 的用户,升级路径:

# 备份
mysqldump -u root -p innocms > backup-before-v0.3.sql

# 拉取 v0.3.0
git pull origin main
composer install --no-dev
php artisan migrate --force

# 清缓存(重要:路由扫描结果会被缓存)
php artisan route:clear
php artisan cache:clear
php artisan config:cache

破坏性变更

  • v0.2 的手动权限项表 admin_permissions 数据会自动迁移到新结构(按路由 code 索引),自定义权限项保留
  • 已存在的插件需要在 Boot.php 里把原来手写的 listen_hook_filter('panel.permissions.list') 移除(现在自动生成)
  • 主题 config.json 字段不变,向后兼容

性能与稳定性

v0.3.0 在 v0.2 基础上没有引入新的运行时开销:

  • 权限扫描结果缓存到 bootstrap/cache/permissions.php,生产环境零开销(开发环境自动 hot-reload)
  • 插件设置页表单渲染走 Blade 缓存,加载速度跟手写表单无差
  • 2C2G 阿里云 ECS 测试:首页 TTFB 平均 65ms(v0.2 是 68ms,无回归)

v0.4 展望

v0.3 把二次开发工具链做扎实之后,v0.4 会聚焦在「内容运营能力」:

  1. Panel API RESTful 化:40+ 端点,配套 ipanel CLI
  2. 多存储后端:本地 + 阿里云 OSS / 腾讯云 COS / 七牛 / S3 / R2 可切换
  3. 访客分析:UV/PV、来源、地理位置自动记录
  4. Aurora 主题:作为生产级参考实现,8000+ 行覆盖所有页面类型

v0.3.0 是 InnoCMS 走向生产就绪的关键一步 —— 插件、主题、权限这三大二次开发支柱全部到位。如果你正在评估企业官网方案,欢迎在 GitHub 给我们提 issue查看完整文档。我们读每一条反馈。

CMS