timedoor / laravel-route-permission
基于 spatie/laravel-permission 扩展,这个包帮助开发者根据 URI 和请求方法授权用户权限。
Requires
- php: ^7.3|^8.0|^8.1
- spatie/laravel-permission: ^5.5
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');
贡献
欢迎拉取请求。对于重大更改,请首先提交问题以讨论您想要更改的内容。