brilliant-portal/framework

BrilliantPortal 是一个有观点的 Laravel 预设。

3.0.1 2024-07-19 21:43 UTC

README

[目录]

BrilliantPortal

BrilliantPortal 是一个有观点的 Laravel 预设。

它提供启动团队和用户模型,简化的团队管理以及基本的 API 端点。

默认情况下,Jetstream 假设每个用户都将有一个个人团队,并且可能被邀请加入其他团队。BrilliantPortal 框架去除了所有用户都将拥有个人团队的假设。更多信息请见 使用说明

BrilliantPortal 框架还安装了它提供的功能的测试集。

PHP 支持矩阵

安装

通过 composer 使用自定义仓库安装此包。

  1. 安装应用
# Require the framework.
composer require brilliant-portal/framework

# Run installation steps.
php artisan brilliant-portal:install
# Available options:
# --stack=livewire|inertia (default livewire)
# --teams (default disabled)
# --api (default disabled)
# --with-airdrop=true (default enabled)

您可以使用以下命令发布配置文件:

php artisan vendor:publish --provider="BrilliantPortal\Framework\FrameworkServiceProvider" --tag="framework-config"

这是发布配置文件的内容

return [

    'api' => [
        'version' => env('BPORTAL_FRAMEWORK_API_VERSION', 'v1'), // API versioning.
    ],

    'telescope' => [
        'prune' => [
            'hours' => env('TELESCOPE_PRUNE_HOURS', 48), // Prune entries older than this many hours.
        ],
    ],
];

更新

在更新 BrilliantPortal Payments 时,您可能希望运行 php artisan brilliant-portal-payments:install-tests 以将任何更新的测试安装到您的应用中。

定制

品牌

要定制品牌,请运行此命令并在您的应用程序中修改新文件

php artisan brilliant-portal:publish-branding

视图

要发布 BrilliantPortal 框架提供的所有视图,请运行此命令并在您的应用程序中修改新文件

php artisan vendor:publish --tag brilliant-portal-framework-views

BetterUptime

有关文档,请参阅 https://betteruptime-laravel.brilliantpackages.com

使用说明

权限

HasTeamPermission 中间件添加到需要特定权限的路由,该权限在您的 JetstreamServiceProvider 中定义。

# Routes file in your app.
use BrilliantPortal\Framework\Http\Middleware\HasTeamPermission;

Route::middleware(['auth:sanctum', HasTeamPermission::class.':create'])
    ->post(/* any endpoint where the user must have the `create` permission on their current team */);

团队

EnsureHasTeam 中间件添加到需要团队的任何路由。如果用户没有团队,他们将被重定向到提示他们创建团队的屏幕。

# Routes file in your app.
use BrilliantPortal\Framework\Http\Middleware\EnsureHasTeam;

Route::middleware(['auth:sanctum', EnsureHasTeam::class])
    ->get('/team/settings/', function () {
        //
    });

创建新团队的截图

creating a team

加入现有团队的提示截图

joining a team

用户

管理员

BrilliantPortal 框架在 users 表和模型中添加了一个 is_super_admin 列。默认情况下,它设置为 false

超级管理员有权限在应用程序中做 任何事情,因此请谨慎使用这些权限。

可以使用 super-admin 能力在授权检查中确定用户是否为超级管理员

if (Auth::user()->can('super-admin')) {
    // User is super-admin.
}

SuperAdmin 中间件添加到需要超级管理员访问的任何路由。如果用户不是超级管理员,他们将收到 403 Forbidden 响应。

# Routes file in your app.
use BrilliantPortal\Framework\Http\Middleware\SuperAdmin;

# Using class name
Route::middleware(['auth:sanctum', SuperAdmin::class])
    ->get('/admin/dashboard/', function () {
        //
    });

# Using ability
Route::middleware(['auth:sanctum', 'can:super-admin'])
    ->get('/admin/dashboard/', function () {
        //
    });

密码

BrilliantPortal 框架设置了一些默认的密码复杂性要求。有关更多信息,请参阅 Laravel 文档

  • 生产环境:最小 8 个字符,大小写混合,不能存在于已知泄露中
  • 非生产环境:最小 8 个字符

单个名称字段

可以使用 \BrilliantPortal\Framework\Traits\HasIndividualNameFields 特性在 User 模型上使用,以指示用户表有独立的 first_namelast_name 字段,而不是 Laravel 提供的标准 name 字段。

组件

默认提供了一些实用的组件

{{-- Headers --}}
<x-brilliant-portal-framework::h1>I’m an h1</x-brilliant-portal-framework::h1>
<x-brilliant-portal-framework::h2>I’m an h2</x-brilliant-portal-framework::h2>
<x-brilliant-portal-framework::h3>I’m an h3</x-brilliant-portal-framework::h3>
<x-brilliant-portal-framework::h4>I’m an h4</x-brilliant-portal-framework::h4>
<x-brilliant-portal-framework::h5>I’m an h5</x-brilliant-portal-framework::h5>
<x-brilliant-portal-framework::h6>I’m an h6</x-brilliant-portal-framework::h6>


{{-- Buttons --}}
<p class="mt-4">
    <x-brilliant-portal-framework::button-link href="#">normal</x-brilliant-portal-framework::button-link>
    <x-brilliant-portal-framework::button-link-success href="#">success</x-brilliant-portal-framework::button-link-success>
    <x-brilliant-portal-framework::button-link-danger href="#">danger</x-brilliant-portal-framework::button-link-danger>
    <x-brilliant-portal-framework::button-link-disabled href="#">disabled</x-brilliant-portal-framework::button-link-danger>
</p>

{{-- Pills (Hardcoded) --}}
<x-brilliant-portal-framework::pills.active>Active</x-brilliant-portal-framework::pills.active>
<x-brilliant-portal-framework::pills.complete>Complete</x-brilliant-portal-framework::pills.complete>
<x-brilliant-portal-framework::pills.inactive>Inactive</x-brilliant-portal-framework::pills.inactive>
<x-brilliant-portal-framework::pills.on-hold>On Hold</x-brilliant-portal-framework::pills.on-hold>
<x-brilliant-portal-framework::pills.pending>Pending</x-brilliant-portal-framework::pills.pending>


{{-- Pills (Dynamic) --}}
@php
    switch ($status) {
        case 'special':
            $pillSlug = 'something-else';
            break;

        default:
            $pillSlug = $status;
            break;
    }

    $pillName = 'brilliant-portal-framework::pills.'.$pillSlug;
@endphp
<x-dynamic-component :component="$pillName">
    {{ $status->label }}
</x-dynamic-component>
// Pills (as a view).
return view('brilliant-portal-framework::components.pills.active', ['slot' => $value]);

示例截图

components

要定制这些组件,请参阅 发布视图

搜索引擎优化

本包使用 Spatie Laravel Robots Middleware 包 来验证 x-robots-tag 头信息。

要使用此功能,请将 \BrilliantPortal\Framework\Http\Middleware\RobotsMiddleware 类添加到您的应用的 bootstrap/app.php 文件中

    ->withMiddleware(function (Middleware $middleware) {
-        //
+        $middleware->append([
+            RobotsMiddleware::class,
+        ]);
    })

您可以使用环境变量 SEARCH_ENGINES_SHOULD_INDEX 和/或 SEARCH_ENGINES_BLOCK_PATTERNS 来控制访问,或者将文件 vendor/brilliant-portal/framework/src/Http/Middleware/RobotsMiddleware.php 复制到您的应用中并进行逻辑修改。

SEARCH_ENGINES_SHOULD_INDEX=false # by default, is true only in production environment
SEARCH_ENGINES_BLOCK_PATTERNS="login,two-factor.*,admin.*" # comma-separated string of route names; wildcards are supported

API

管理端点

BrilliantPortal 框架提供用于管理团队和用户的管理端点。

详情请查看 /dashboard/api-documentation

管理端点需要超级管理员或以下明确权限(要使用这些权限,请将它们添加到应用的 app/Providers/JetstreamServiceProvider.php 中对应角色)

  • admin:create
  • admin:read
  • admin:update
  • admin:delete

通用端点

BrilliantPortal 框架提供用于管理应用中除团队和用户外的任何模型的通用端点。

详情请查看 /dashboard/api-documentation

这主要用于简单的 API 集成,不需要花费时间构建完整的端点和文档。URL 参数 type 指定了要使用的模型。

您应该为每个模型创建策略,并将它们添加到 app/Providers/AuthServiceProvider.php 文件中。

为了方便使用,您可以扩展 BrilliantPortal\Framework\Policies\BasePolicy.php 并使用 return $this->checkTeamOwnership($user, $model, $action);。请参考 BrilliantPortal\Framework\User.php 中的示例。

创建新端点

您应该为每个模型创建策略,并将它们添加到 app/Providers/AuthServiceProvider.php 文件中。

为了方便使用,您可以扩展 BrilliantPortal\Framework\Policies\BasePolicy.php 并使用 return $this->checkTeamOwnership($user, $model, $action);。请参考 BrilliantPortal\Framework\User.php 中的示例。

您可以将 BrilliantPortal\Framework\Http\Controllers\Api\Admin\User 复制过来,用作自定义 API 控制器的起点。这扩展了 BrilliantPortal\Framework\Http\Controllers\Api\Controller,它提供了默认的授权策略。它还提供了示例 OpenAPI 路由注解。

请查看 brilliant-portal/framework/src/OpenApi 中的示例 OpenAPI 请求、响应和模式文件,以及 https://vyuldashev.github.io/laravel-openapi 中的文档。

您还可以使用或扩展 BrilliantPortal\Framework\Http\Resources\DataWrapCollection 来包装模型索引响应,以及 BrilliantPortal\Framework\Http\Resources\JsonResource 来处理单个模型响应。

测试

composer test

变更日志

请查看 CHANGELOG 了解最近的变化。

许可证

MIT 许可证 (MIT)。请查看 许可证文件 了解更多信息。