cyaoz94/laravel-utilities

这是一个用于轻松设置 Laravel 后端服务的包。

1.4.3 2022-04-08 08:04 UTC

This package is auto-updated.

Last update: 2024-09-08 13:13:40 UTC


README

这是一个包含一些实用工具的包,例如内置的认证和授权(Spatie Laravel Permissions)、易于设置模型过滤(Filtertable)和易于设置 CRUD API(CrudController)。

安装

通过 composer 安装此包

composer require cyaoz94/laravel-utilities:^1.0

用法

CrudController

您可以通过扩展我们的控制器来使用我们的基本功能以加快您的 CRUD API 开发。只需在构造方法中指定模型类,CrudController 中定义的 CRUD 方法就会知道要查询哪个模型。

// imports
use Cyaoz94\LaravelUtilities\CrudController;

class AdminUserController extends CrudController
{

    public function __construct(Request $request)
    {
        // let specify model class
        $this->modelClass = AdminUser::class;

        parent::__construct($request);
    }
    // your implementation here
}

可过滤

您还可以使用我们的 Filterable 特性,以便轻松为控制器的 CRUD 方法实现过滤逻辑。

首先,在您的模型中使用该特性。

// imports
use Cyaoz94\LaravelUtilities\Filters\Filterable;

class AdminUser extends Authenticatable 
{
    // use Filterable trait
    use HasFactory, Filterable;
}

定义您的过滤类。这里我们将定义一个 name() 方法来处理对名称列的过滤。请注意,过滤键始终应该是 snake_case,例如 some_keyQueryFilter.php 类将遍历请求体中的所有参数,以查看是否找到任何匹配的 camelCase 方法名称。使用我们之前的 some_key 例子,匹配的函数名称将是 someKey()

namespace Cyaoz94\LaravelUtilities\Filters;

class AdminUserFilter extends QueryFilter
{
    public function name($value)
    {
        parent::like('name', $value);
    }
}

然后在您的控制器的构造函数中,指定要使用的过滤类。现在,请求体中提交的 name 的值将用于过滤。

// imports
use Cyaoz94\LaravelUtilities\CrudController;
use Cyaoz94\LaravelUtilities\Filters\AdminUserFilter;

class AdminUserController extends CrudController
{

    public function __construct(Request $request)
    {
        $this->modelClass = AdminUser::class;
        // specify Filter class
        $this->filterClass = AdminUserFilter::class;

        parent::__construct($request);
    }

    // your implementation here
}

在某些情况下,您可能需要覆盖 CrudController 的基本函数,您仍然可以通过以下方式利用 Filterable 特性

class AdminUserController extends CrudController
{
    // an overriding function in the child class
    public function index(Request $request)
    {
        $query = AdminUser::filter(new AdminUserFilter($request));

        // your implementations
    }
}

迁移

此包的迁移现在可以在 "migrations" 标签下发布。它将在数据库路径的迁移文件夹中发布 create_admin_users_table 迁移,通过当前日期和时间进行前缀。

php artisan vendor:publish --provider="Cyaoz94\LaravelUtilities\LaravelUtilitiesServiceProvider" --tag="migrations"

运行迁移以创建 admin_users 表。

php artisan migrate

Spatie Laravel Permission

您可以使用我们的包轻松集成 spatie laravel permission。您应该使用以下命令发布 migrationconfig/permission.php 配置文件:

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"

运行迁移以创建所有相关表。

php artisan migrate

您需要在 app/Http/Kernel.php 文件中注册我们的中间件。如果您想覆盖我们的中间件,您可以创建您自己的中间件并扩展我们的中间件。请记住在 app/Http/Kernel.php 中注册您的中间件。

protected $routeMiddleware = [
    'permission' => \Cyaoz94\LaravelUtilities\PermissionMiddleware::class,
];

您需要在 app/Exceptions/Handler.php 中添加 PermissionMiddleware 异常处理。

namespace App\Exceptions;

use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Spatie\Permission\Exceptions\UnauthorizedException as SpatieUnauthorizedException;
use Throwable;

class Handler extends ExceptionHandler
{
    public function render($request, Throwable $exception, $message = '')
    {
        if ($exception instanceof SpatieUnauthorizedException) {
            return response()->json(
                [
                    'code' => 401,
                    'error_message' => 'Unauthorized',
                ], 401
            );
        }
    }
}

在您的路由中使用中间件。

Route::get('', [AdminUserController::class, 'index'])->middleware('permission:admin-user.read');

种子

此包的种子现在可以在 "seeders" 标签下发布。它将在数据库路径的种子文件夹中发布 RolePermissionSeeder 种子器。

php artisan vendor:publish --provider="Cyaoz94\LaravelUtilities\LaravelUtilitiesServiceProvider" --tag="seeders"

RolePermissionSeeder 将种植基本权限,创建超级管理员角色,授予超级管理员权限,并创建一个作为超级管理员的用户。通过以下方式运行种子器:

php artisan db:seed --class=RolePermissionSeeder

RolePermissionSeeder.php 中,您可以根据您的系统需求更新 permissions 数组。我们包括了一些基本的。您始终可以在添加或更新权限时运行此种子器。它有助于相应地更新。

$permissions = [
    'admin-user.create',
    'admin-user.read',
    'admin-user.update',
    'admin-user.delete',
    'user.create',
    'user.read',
    'user.update',
    'user.delete',
    'role.create',
    'role.read',
    'role.update',
    'role.delete',
];

RolePermissionSeeder.phpCyaoz94\LaravelUtilities\Models\AdminUser.php 中,我们默认了 $guardName = 'admin'。您可能想将其更改为其他守卫名称,例如 sanctum。您可以创建您自己的 AdminUser 模型并扩展我们的模型。您需要在 RolePermissionsSeedeer.phpAdminUser 模型中更新守卫名称。

// database/seeders/RolePermissionSeeder.php

$guardName = 'sanctum';
// app/Models/AdminUser.php

namespace App\Models;

use Laravel\Sanctum\HasApiTokens;
use Cyaoz94\LaravelUtilities\Models\AdminUser as BaseAdminUser;

class AdminUser extends BaseAdminUser
{
    use HasApiTokens;

    protected $guard_name = 'sanctum';
}

角色功能

要使用与角色相关的功能(例如 RoleController),请在 AuthServiceProvider 中注册 RolePolicy。

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Spatie\Permission\Models\Role;
use Cyaoz94\LaravelUtilities\Policies\RolePolicy;

class AuthServiceProvider extends ServiceProvider
{
    protected $policies = [
        Role::class => RolePolicy::class,
    ];

    public function boot()
    {
        $this->registerPolicies();
    }
}

测试

composer test

变更日志

请参阅变更日志获取最近更改的更多信息。

贡献

请参阅贡献指南获取详细信息。

安全性

如果您发现任何安全相关的问题,请联系您的资深开发人员。

鸣谢

  • Casper Ho

许可证

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

Laravel软件包模板

此软件包是使用Laravel软件包模板生成的。