aimeos/laravel-cms

dev-master 2024-09-19 10:35 UTC

This package is auto-updated.

Last update: 2024-09-19 10:36:06 UTC


README

Laravell CMS

Laravel CMS - 强大如Contentful,简单如Wordpress!

简单、灵活且可扩展的API-first Laravel CMS包

  • 像在Contentful一样管理结构化内容
  • 几秒钟内定义新的内容元素
  • 允许嵌套内容元素
  • 保存、发布和撤回草稿
  • 将内容分配给多个页面
  • 极快的JSON前端API
  • 多功能的GraphQL管理API
  • 支持多语言
  • 支持多域名路由
  • 支持多租户
  • 支持软删除
  • 完全开源
  • 从单个页面扩展到使用DB集群的数百万页面

可以安装到任何现有的Laravel应用程序中。

目录

安装

在您的Laravel应用程序目录中运行此命令

composer req aimeos/laravel-cms
php artisan cms:install --seed

如果您不想添加任何演示页面,请删除 --seed 选项。

授权

要允许现有用户编辑CMS内容或在没有用户的情况下创建新用户,您可以使用 cms:user 命令(将电子邮件地址替换为用户的电子邮件地址)

php artisan cms:user editor@example.com

要禁止用户编辑CMS内容,使用

php artisan cms:user --disable editor@example.com

清理

为了定期清理软删除的页面、内容和文件,请将这些行添加到您的 app/Console/Kernel.php 类中的 schedule() 方法

$schedule->command('model:prune', [
    '--model' => [
        \Aimeos\Cms\Models\Page::class,
        \Aimeos\Cms\Models\Version::class,
        \Aimeos\Cms\Models\Content::class,
        \Aimeos\Cms\Models\File::class],
])->daily();

您可以通过设置 cms.purge 选项来配置软删除项在永久删除后的时间段。其值必须是项目将被永久删除的天数,或者如果不应删除软删除的项目,则为FALSE。

多域名

通过更改 ./routes/web.php 中的 cms.page 路由,可以使用不同的域名配置多个页面树

Route::group(['domain' => '{domain}'], function() {
    Route::get('{slug?}/{lang?}', [\Aimeos\Cms\Http\Controllers\PageController::class, 'index'])->name('cms.page');
});

页面的 domain 属性必须与请求的域名匹配。

多租户

Laravel CMS支持使用现有的Laravel租户包或您自己实现的代码实现的单数据库多租户。

最常用的是Tenancy for Laravel 包。如何设置该包的说明可以在租户快速入门中找到,也可以查看单数据库租户文章。

之后,告诉Laravel CMS如何检索当前租户的ID。将此代码添加到 ./app/Providers/AppServiceProvider.php 文件中的 \App\Providers\AppServiceProviderboot() 方法

\Aimeos\Cms\Tenancy::$callback = function() {
    return tenancy()->initialized ? tenant()->getTenantKey() : '';
};

自定义授权

如果您想将Laravel CMS集成到另一个应用程序中,您可能希望根据您自己的授权方案授予访问权限。您可以通过添加自己的函数来替换Laravel CMS的权限处理。将此代码添加到 ./app/Providers/AppServiceProvider.php 文件中的 \App\Providers\AppServiceProviderboot() 方法

\Aimeos\Cms\Permission::$callback = function( string $action, ?\App\Models\User $user ) : bool {
    if( /* check access */ ) {
        return true;
    }

    return false;
};

第一个参数是请求的操作访问权限,例如 "page:view",而第二个参数是认证后的用户对象。默认情况下,CMS用户的权限通过其用户对象中的cmseditor列的授权位图进行检查,该列来自Laravel的users表。函数必须返回TRUE以授权访问或返回FALSE以拒绝访问。

可以授权访问的动作包括

  • page:view(显示页面树)
  • page:save(更新现有页面)
  • page:add(添加新页面)
  • page:drop(软删除页面)
  • page:keep(恢复软删除的页面)
  • page:purge(永久删除页面)
  • page:publish(发布页面元数据)
  • page:move(在树中移动页面)
  • content:view(显示内容元素)
  • content:save(更新现有内容元素)
  • content:add(添加新内容元素)
  • content:drop(软删除内容元素)
  • content:keep(恢复软删除的内容元素)
  • content:purge(永久删除内容元素)
  • content:publish(发布内容元素)
  • content:move(在页面内移动内容元素)
  • file:view(显示上传的文件)
  • file:save(更新现有文件)
  • file:add(添加新文件)
  • file:drop(软删除文件)
  • file:keep(恢复软删除的文件)
  • file:purge(永久删除文件)