mayconbordin/entrust-middleware

Entrust 的 Laravel 5 中间件

dev-master 2016-07-27 11:04 UTC

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 installcomposer 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;
    }
}

然后您在 AppServiceProviderregister 方法上注册实现

$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']
]);