codificio/carpentree-core

Caprentree 框架的核心包


README

要求

  • PHP 7.2+
  • Laravel 5.7+
  • MySQL 5.7+(此包使用 json 列)
  • exif 扩展(在大多数系统中默认安装)。
  • GD 扩展
  • 如果您想创建 PDF 或 SVG 缩略图,则需要 ImagickGhostscript
  • 为了创建视频文件的缩略图,您的系统上需要安装 ffmpeg

安装

  • 通过 Composer
$ composer require carpentree/core
  • 重要! 移除默认的 Laravel 用户迁移

    • yyyy_mm_dd_HHiiss_create_users_table.php
    • yyyy_mm_dd_HHiiss_create_password_resets_table.php
  • 运行迁移

$ php artisan migrate
  • 由于该包使用 Laravel Passport,因此需要安装它
$ php artisan passport:install
  • 在您的 config/auth.php 配置文件中,应将 api 身份验证守护程序的 driver 选项设置为 passport
'guards' => [
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],
  • [可选] 如果您想,可以从 App/User 中移除默认的 User 模型类。
  • [可选] 如果您想,可以移除不再有用的中间件和控制器。请记住,此包旨在提供 无状态 应用程序骨架,因此默认的 session 身份验证将不会使用。
  • 在您的 config/auth.php 配置文件中,应将 users 提供程序的 model 选项设置为新的 User 类。
'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => \Carpentree\Core\Models\User::class,
        ],
    ],
  • 除非您需要覆盖它,否则请从 routes 文件夹中移除默认的 Laravel 路由。默认情况下,Carpentree 具有一个用于初始化 React 应用程序的根路由(及其视图)。

不要删除文件,因为它们将有助于您自己的应用程序。只需在开始开发之前删除其内容即可。

使用方法

授权和身份验证

CORS

CORS 中间件基于 https://github.com/barryvdh/laravel-cors

CORS 中间件已包含在 api 路由组中。

为了进行自定义配置,发布 CORS 配置文件

$ php artisan vendor:publish --provider="Barryvdh\Cors\ServiceProvider" 

注意:当使用自定义头,如 X-Auth-Token 或 X-Requested-With 时,必须设置 allowedHeaders 以包括那些头。您也可以将其设置为 array('*') 以允许所有自定义头。

注意:如果您明确地允许头,则必须包括 Origin,否则请求将无法被识别为 CORS。

return [
     /*
     |--------------------------------------------------------------------------
     | Laravel CORS
     |--------------------------------------------------------------------------
     |
     | allowedOrigins, allowedHeaders and allowedMethods can be set to array('*')
     | to accept any value.
     |
     */
    'supportsCredentials' => false,
    'allowedOrigins' => ['*'],
    'allowedHeaders' => ['Content-Type', 'X-Requested-With'],
    'allowedMethods' => ['*'], // ex: ['GET', 'POST', 'PUT',  'DELETE']
    'exposedHeaders' => [],
    'maxAge' => 0,
];

注意:由于 Laravel 中的 http 方法覆盖,允许 POST 方法也将允许 API 用户执行 PUT 和 DELETE 请求。

启用社交身份验证

添加 OAuth 服务凭据,您的应用程序使用。这些凭据应放置在您的 config/services.php 配置文件中,并使用等于提供程序名称的键(例如,facebookgooglegithub 等)。

例如

'google' => [
    'client_id' => env('GOOGLE_CLIENT_ID'),
    'client_secret' => env('GOOGLE_CLIENT_SECRET'),
    'redirect' => env('GOOGLE_REDIRECT_URL'),
],

我们将仅使用 Socialite 从访问令牌中检索用户详细信息,因此我们可以将 client_id、client_secret、redirect 用空字符串(不是 NULL)填充,因为它们在我们的流程中不会使用。

角色和权限

有一个 Super Admin 角色可以执行所有操作。为了确保您正确地通过了此角色的检查,您必须使用原生 Laravel 的 @cancan() 指令。

通常最好围绕 permissions 编码应用程序。这样,您就可以在应用程序的任何地方使用原生的 Laravel @cancan() 指令。

中间件

由于本软件包基于 spatie\laravel-permission 的角色和权限系统,如果您想使用中间件,需要将它们添加到您的 app/Http/Kernel.php 文件中。

protected $routeMiddleware = [
    // ...
    'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
    'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
    'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
];
管理权限
  • 发布配置文件
$ php artisan vendor:publish --provider="Carpentree\Core\CoreServiceProvider --tag=config" 
  • 将您想要添加的权限添加到 carpentree.permissions 配置文件中,例如:
'permissions' => [
    'users' => [
        'create',
        'read',
        'update',
        'delete',
        'manage-permissions'
    ],
    
    'group-key' => [
        'permission-key-1',
        'permission-key-2',
        // ...
    ]
]
  • 通过运行控制台命令来更新您的数据库
$ php artisan carpentree:refresh-permissions

权限最终名称将是 group-key.permission-key,您可以在代码中引用它,例如:

$user->can('users.delete');

为 Eloquent 模型分配状态

我们使用 Spatie 的 laravel-model-status 包。请参阅他们的文档

为 Eloquent 模型分配分类

要为您的 Eloquent 模型添加分类支持,只需使用 \Carpentree\Core\Traits\Categorizable 特性。

对于这个功能,我们受到了 https://github.com/rinvex/laravel-categories 的启发。阅读其文档以获取更多信息。

全文搜索

TODO (Algolia)

元字段

为了使模型启用元字段,请将 HasMeta 特性分配给模型。为了保持灵活性和简单性,您可以考虑将元字段的 value 属性视为 JSON 容器。

本地化

使用此命令发布配置

php artisan vendor:publish --tag=translatable

之后,可在配置文件 config\translatable.php 中设置可用语言。

安全

如果您发现任何与安全相关的问题,请通过电子邮件 enrico@codificio.com 联系我们,而不是使用问题跟踪器。

许可证

MIT。请参阅许可证文件以获取更多信息。