我正在使用Laravel Spatie的api获得用户权限。版本是Laravel-5.8。
OrderController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Order;
use App\User;
use App\Student;
use App\Guardian;
class OrderController extends Controller
{
public function index(Request $request)
{
if(!Auth::user()->hasPermissionTo('View Order'))
return response()->json([ "message" => 'User do not have permission'], 401);
return response()->json(::with('order_detail')->get(), 200);
}
public function store(Request $request)
{
if(!Auth::user()->hasPermissionTo('Add Order'))
return response()->json([ "message" => 'User do not have permission'], 401);
$request->validate([
'week_day' => 'required|integer',
'start' => 'required',
'end' => 'required',
'amount' => 'required',
'full_name' => 'required'
]);
$orders = Order::create($request->all());
return json_encode($orders);
}
public function show($id)
{
if(!Auth::user()->hasPermissionTo('View Order'))
return response()->json([ "message" => 'User do not have permission'], 401);
return json_encode(Order::findOrFail($id));
}
}
api.php
Route::group([
'middleware' => 'auth:api'
], function () {
Route::get('order/mobile', 'OrderController@mobile');
Route::resource('order', 'OrderController', ['only' => ['index', 'show', 'store', 'update', 'destroy']]);
});
我希望所有访问该网站的人都可以创建,存储和发送订单,而无需登录。但是,索引,更新和删除需要权限。对此不应该被允许。如何调整我的控制器和api.php以实现创建和存储订单的预期结果?
答案 0 :(得分:0)
auth
中间件阻止了所有未经身份验证的用户访问它们。您可以删除中间件,也可以创建两个组,其中索引,更新和删除在auth
中间件下,而第二个组在其他路由中没有auth
。
如果从路由组中删除中间件,则可以将其添加到控制器中的特定方法中,
public function __construct()
{
$this->middleware('auth')->only(['index', 'update', 'destroy']);
}
当然,您还可以指定Spatie中间件
public function __construct()
{
$this->middleware('role:Contributor')->only(['index', 'update', 'destroy']);
}
但是,您还可以在控制器方法中手动测试各种用户权限
if ($user->hasRole('Contributor')){};
这样,您可以允许未经身份验证的用户执行某些操作,但将某些操作限制为对用户进行身份验证。