cyaoz94 / laravel-utilities
这是一个用于轻松设置 Laravel 后端服务的包。
Requires
- php: ^7.4|^8.0
- illuminate/support: ^8.0|^9.0
- spatie/laravel-permission: ^5.1
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.0
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_key
。QueryFilter.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。您应该使用以下命令发布 migration
和 config/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.php
和 Cyaoz94\LaravelUtilities\Models\AdminUser.php
中,我们默认了 $guardName = 'admin'
。您可能想将其更改为其他守卫名称,例如 sanctum
。您可以创建您自己的 AdminUser
模型并扩展我们的模型。您需要在 RolePermissionsSeedeer.php
和 AdminUser
模型中更新守卫名称。
// 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软件包模板生成的。