添加功能以启用或禁用用户根据分配的发票使用特定功能
Add functionality to enable or disable user to use specific features on basis of invoice Assigned
我正在做一个项目,我有三种类型的用户 Admin 和 user1 和 user2。我希望 user1 和 user2 仅当管理员已向他们分配发票时才能够在应用程序中使用某些功能。我尝试使用下面给出的辅助函数。
$invoice = Invoice::pluck('user_id')->toArray();
if (Auth::user()->admin == 1 || in_array(Auth::user()->id, $invoice)) {
return 1;
} else {
return 0;
}
但这不能正常工作。我必须将它放在控制器的每个方法之前,以限制用户使用该功能。还有什么我可以做的吗?
对此有更好的方法吗?
你可以使用 make 一个中间件并传递请求抛出它来检查用户是否被授权这样做。
class SomeMidllewareName
{
/**
* Handle an incoming request.
*
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$invoice = Invoice::pluck('user_id')->toArray();
if (1 == Auth::user()->admin || in_array(Auth::user()->id, $invoice)) {
return $next($request);
}
return \response()->json(['message' => 'you are not authorized'], 401);
}
}
然后,您可以在路由上进行验证,也可以使用 策略 并单独验证每个功能
您可以使用 middlewares.
使用
创建你的中间件
php artisan make:middleware UserWithInvoiceMiddleware
然后在 app/Http/Middleware/UserWithInvoiceMiddleware.php
中打开您的文件,并将其添加到 handle
方法中:
public function handle($request, Closure $next, ...$guards)
{
$user = auth()->user();
$invoice = Invoice::pluck('user_id')->toArray();
if ($user->admin || in_array($user->id, $invoice)) {
return $next($request);
}
return response()->json(['message' => 'Request not authorized.'], 401);
}
另外,您可以在您的用户模型中创建一个与发票模型的关系:
public function invoice()
{
return $this->hasOne(Invoice::class);
}
然后,您可以使用此关系简化您的中间件:
public function handle($request, Closure $next, ...$guards)
{
if (auth()->user()->admin || auth()->user()->has('invoice')) {
return $next($request);
}
return response()->json(['message' => 'Request not authorized.'], 401);
}
您必须在 app/Http/Kernel.php
中的 $routeMiddleware
数组下注册您的中间件:
protected $routeMiddleware = [
...
'user-with-invoice' => App\Http\Middleware\UserWithInvoiceMiddleware::class,
];
然后,您可以使用此中间件保护您的路由,在用户必须是管理员或有发票的路由中添加 ->middleware('user-with-invoice')
:
Route::get('/example', ExampleController::class)->middleware('user-with-invoice');
我正在做一个项目,我有三种类型的用户 Admin 和 user1 和 user2。我希望 user1 和 user2 仅当管理员已向他们分配发票时才能够在应用程序中使用某些功能。我尝试使用下面给出的辅助函数。
$invoice = Invoice::pluck('user_id')->toArray();
if (Auth::user()->admin == 1 || in_array(Auth::user()->id, $invoice)) {
return 1;
} else {
return 0;
}
但这不能正常工作。我必须将它放在控制器的每个方法之前,以限制用户使用该功能。还有什么我可以做的吗? 对此有更好的方法吗?
你可以使用 make 一个中间件并传递请求抛出它来检查用户是否被授权这样做。
class SomeMidllewareName
{
/**
* Handle an incoming request.
*
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$invoice = Invoice::pluck('user_id')->toArray();
if (1 == Auth::user()->admin || in_array(Auth::user()->id, $invoice)) {
return $next($request);
}
return \response()->json(['message' => 'you are not authorized'], 401);
}
}
然后,您可以在路由上进行验证,也可以使用 策略 并单独验证每个功能
您可以使用 middlewares.
使用
创建你的中间件php artisan make:middleware UserWithInvoiceMiddleware
然后在 app/Http/Middleware/UserWithInvoiceMiddleware.php
中打开您的文件,并将其添加到 handle
方法中:
public function handle($request, Closure $next, ...$guards)
{
$user = auth()->user();
$invoice = Invoice::pluck('user_id')->toArray();
if ($user->admin || in_array($user->id, $invoice)) {
return $next($request);
}
return response()->json(['message' => 'Request not authorized.'], 401);
}
另外,您可以在您的用户模型中创建一个与发票模型的关系:
public function invoice()
{
return $this->hasOne(Invoice::class);
}
然后,您可以使用此关系简化您的中间件:
public function handle($request, Closure $next, ...$guards)
{
if (auth()->user()->admin || auth()->user()->has('invoice')) {
return $next($request);
}
return response()->json(['message' => 'Request not authorized.'], 401);
}
您必须在 app/Http/Kernel.php
中的 $routeMiddleware
数组下注册您的中间件:
protected $routeMiddleware = [
...
'user-with-invoice' => App\Http\Middleware\UserWithInvoiceMiddleware::class,
];
然后,您可以使用此中间件保护您的路由,在用户必须是管理员或有发票的路由中添加 ->middleware('user-with-invoice')
:
Route::get('/example', ExampleController::class)->middleware('user-with-invoice');