timedoor/laravel-route-permission

基于 spatie/laravel-permission 扩展,这个包帮助开发者根据 URI 和请求方法授权用户权限。

v1.0.2 2022-10-21 01:11 UTC

This package is auto-updated.

Last update: 2024-09-21 05:33:43 UTC


README

spatie/laravel-permission 版本 5 扩展,这个包帮助开发者根据 URI 和请求方法授权用户权限。

安装

使用包管理器 composer 安装此包。

composer require timedoor/laravel-route-permission

使用以下命令在项目中发布包:

php artisan routepermission:install

然后运行数据库迁移。

php artisan migrate

用法

您可以使用此包提供的名为 route-permission 的路由中间件别名,它可以从 config/permission.php 进行配置,例如

Route::middleware(['route-permission'])->group(function () {
    //
});

或者如果您使用守卫,可以使用它,例如一个 api 守卫。

Route::middleware(['route-permission:api'])->group(function () {
    //
});

如果您使用此中间件,则您的用户必须已登录,此中间件将自动将登录用户的权限与当前路由 URI 匹配。

要为 REST API 创建权限,您可以使用此包提供的权限模型,例如

use Timedoor\RoutePermission\Models\Permission;

Permission::createForRoute(['uri' => 'api/user']);

Permission::createForRoute(['uri' => 'api/user/{id}', 'method' => 'POST']);

Permission::createForRoute(['uri' => 'api/user', 'guard_name' => 'api']);

Permission::createForRoute(['uri' => 'api/user/*']);

在保存权限时,此包将从提供的 uri 中删除所有空白字符和 / 字符。

您可以使用 * 作为路由权限的通配符。

确保您为角色和权限模型包含 Timedoor\RoutePermission 的 traits 以使用路由的扩展功能。

对于 uri 值,请使用以下代码之一提供的字符串进行准确引用。

\Route::current()->uri(); // Return current route URI.

collect(\Route::getRoutes())->map(function ($route) { return $route->uri(); }); // Listing all registered route URI.

在数据库中,权限名称将存储为 route>>api/user>>*(如果未提供第二个参数,则存储为通配符 *)或 route>>api/user/{参数}>>POST(所有路由参数将转换为 参数,或者您可以通过 config/permission.php 改变此行为)

您可以使用默认的 spatie/laravel-permission 工具访问它

$user->can('route>>api/user/{parameter}>>POST');

或者使用提供的辅助函数生成格式化的权限名称。

$user->can(getRoutePermissionName('api/user/{id}', 'POST'));

对于操作路由权限,以下是其他扩展方法的列表

use Timedoor\RoutePermission\Models\Permission;

Permission::createForRoute(['uri' => 'api/user']);

Permission::firstOrCreateForRoute(['uri' => 'api/user']);

Permission::findByNameForRoute('api/user/{id}', 'POST');

Permission::findOrCreateForRoute('api/user/{id}', 'POST');

// Scope a query to only include route permissions.
Permission::route()->get();

// Scope a query to not include route permissions.
Permission::withoutRoute()->get();

// You can call below methods from role instance too.
$user->givePermissionForRoute('api/user/{id}', 'POST');

$user->revokePermissionForRoute('api/user/{id}', 'POST');

$user->syncForRoute([
    ['uri' => 'api/user'],
    ['uri' => 'api/user/{id}', 'method' => 'POST'],
]);

$user->hasPermissionForRoute('api/user/{id}', 'POST');

贡献

欢迎拉取请求。对于重大更改,请首先提交问题以讨论您想要更改的内容。

许可证

MIT