我使用 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,用户的角色是什么,然后将它们重定向到管理控制器。
因为您可能还需要更新和删除,或其他只能由管理员访问的功能
| 归档时间: |
|
| 查看次数: |
1952 次 |
| 最近记录: |