根据用户角色执行操作

时间:2019-11-29 08:11:52

标签: laravel api

users表具有外键role_idroles表包含name字段,种子主持人和客户端。我正在开发一个api,我有TicketController,只有客户端可以创建它们。现在存储在TicketController中的样子:

public function store(Request $request) : TicketResource
{
    $ticket = new Ticket();

    $ticket->title = $request->title;
    $ticket->desciption = $request->description;
    $ticket->user_id = auth()->user()->id;
    $ticket->department_id = $request->department_id;

    $ticket->save;

    return new TicketResource($ticket);
}

api.php中的路由是

Route::group(['middleware' => 'auth:api'], function(){
    Route::post('tickets', 'Api\TicketController@store');
});

1 个答案:

答案 0 :(得分:2)

如果您要创建API,我强烈建议您使用Passport。刚开始使用时有点不方便,但功能非常强大。它具有的功能之一是“作用域”,它使您可以根据给定的作用域来限制用户的操作。

使用范围,您可以根据用户角色为不同的用户提供不同的范围。然后,在您的路线中,您可以执行以下操作。

Route::group(['middleware' => ['auth:api', 'scopes:can-store'] ], function(){
    Route::post('tickets', 'Api\TicketController@store');
});

您甚至可以保持简单,并为作用域命名为用户角色

Route::group(['middleware' => ['auth:api', 'scopes:editor,admin'] ], function(){
    Route::post('tickets', 'Api\TicketController@store');
});

看看documentation so you can see how scopes work here