mayconbordin / entrust-middleware
Entrust 的 Laravel 5 中间件
dev-master
2016-07-27 11:04 UTC
Requires
- php: >=5.4.0
- illuminate/routing: 5.0.*|5.1.*|5.2.*
- illuminate/support: 5.0.*|5.1.*|5.2.*
This package is not auto-updated.
Last update: 2024-09-14 17:21:19 UTC
README
Entrust 的 Laravel 5 中间件。
安装
为了安装 entrust-middleware,只需将以下内容添加到您的 composer.json 文件中。
"mayconbordin/entrust-middleware": "dev-master"
然后运行 composer install
或 composer update
。
添加以下行
'permissions' => 'Mayconbordin\Entrust\Middleware\Permissions'
到您的 app/Http/Kernel.php
文件中的 $routeMiddleware
数组。
所有权解析器
要使用此中间件,您需要实现 OwnershipResolverContract
并将绑定接口注册到您的实现中。
该接口定义了一个名为 hasOwnership($permission, $user, Route $route)
的方法,它必须返回一个布尔值。其思路是,有时权限是条件性的,这意味着用户只有在他拥有该资源的情况下才能访问或对该资源进行操作。
例如,想象一个有多个作者的博客,只有作者才能编辑自己的帖子。为了使 OwnershipResolverContract
服务评估权限,权限名称必须包含 -own-
,在这种情况下为 edit-own-post
。
合同的实现可能看起来像这样
class OwnershipResolver implements OwnershipResolverContract { public function hasOwnership($permission, $user, Route $route) { if ($permission == 'edit-own-post') { $post = Post::find($route->getParameter("id")); if ($post->author->id == $user->id) return true; } return false; } }
然后您在 AppServiceProvider
的 register
方法上注册实现
$this->app->bind( 'Mayconbordin\Entrust\Middleware\Contracts\OwnershipResolverContract', 'App\Services\OwnershipResolver' );
用法
要检查路由中的权限
Route::put('/posts/{id}', [ 'uses' => 'PostController@edit', 'middleware' => 'permissions', 'permissions' => 'edit-own-post' ]);
或者您也可以检查角色
Route::put('/posts/{id}', [ 'uses' => 'PostController@edit', 'middleware' => 'permissions', 'roles' => 'admin' ]);
您还可以同时检查权限和角色
Route::put('/posts/{id}', [ 'uses' => 'PostController@edit', 'middleware' => 'permissions', 'permissions' => 'edit-own-post', 'roles' => 'admin' ]);
在这种情况下,用户必须具有该权限或该角色。最后,您还可以列出多个权限或角色
Route::put('/posts/{id}', [ 'uses' => 'PostController@edit', 'middleware' => 'permissions', 'permissions' => ['edit-post', 'edit-own-post'] ]);