RESTful API 基于用户角色的不同响应

Ama*_*mas 6 php rest laravel

我使用 Laravel 作为我的 PHP 框架。它是将index show store ...函数放入控制器的约定。

我有两种类型的用户(管理员和普通用户)。让我们假设有一个Order(在餐厅)模型,我想index为其控制器实现功能。一个用户可以有多个订单。

我需要的是这个功能:

  • 如果管理员正在调用此 API:返回所有订单
  • 如果普通用户正在调用此 API:仅返回此用户拥有的订单

我搜索过,但找不到任何东西(tbh 我不知道要搜索什么)。

一旦我按照以下方式执行此操作,我不喜欢它,因为它看起来两个不同的功能合二为一:

if ($user->role == admin) {
       // fetch all orders
   } else if ($user->role == normal_user) {
       // just find user orders
     }
Run Code Online (Sandbox Code Playgroud)

所以我的问题是实现我想要的最佳方法是什么?

小智 1

为什么不使用 if 语句?

您可以在模型上制定一个范围,但您仍然会有一个“如果”。

那这个呢?

if ($user->role == admin) {    
    Order::all();
} else if ($user->role == normal_user) {
   $user->orders()->get();
}
Run Code Online (Sandbox Code Playgroud)

或者将其设为内联 if

$user->role == admin ? Order::all() : $user->orders()->get();

IMO 这里的最佳实践是制作不同的 Admin/OrderController.php

然后用中间件检查wat,用户的角色是什么,然后将它们重定向到管理控制器。

因为您可能还需要更新和删除,或其他只能由管理员访问的功能