public function authorize()
{
return $this->user()->can('update', [
$this->order,
[
'user_id' => $this->user_id,
'table_id' => $this->table_id,
'total_person' => $this->total_person,
'status' => $this->status,
]
]);
}
public function update(User $user, Order $order, array $params = [])
{
if ($user->isEmployee()) {
# employee нельзя обновлять заказ другого пользователя
# employee должен назначить заказ сначала на себя
if ($user->id !== $order->user_id && $user->id != $params['user_id']) {
return false;
}
}
if ($user->isAdmin()) {
# admin может изменять заказы только у себя или у employee
if (!$order->user?->isEmployee() || $user->id !== $order->user_id) {
return false;
}
}
if (isset($params['table_id']) || isset($params['user_id']) || isset($params['total_person'])) {
return $order->canUpdate();
}
if (isset($params['status'])) {
return $order->canUpdate('status');
}
}
Route::controller(\App\Http\Controllers\Admin\EmployeeController::class)->prefix('/employees')->group(function() {
Route::get('/', 'getAll')->can('getEmployees', 'project');
Route::get('/{user}', 'show')->can('getEmployee', 'project');
Route::delete('/{user}', 'destroy')->can('deleteEmployee', 'project');
});
Не твой заказ - иди нахрен.
if ($this->user()->isEmployee()) {
# employee нельзя обновлять заказ другого пользователя
# employee должен назначить заказ сначала на себя, чтобы потом обновлять
if ($this->user()->id !== $this->order->user_id && $this->user()->id != $this->user_id) {
return false;
}
}
// order model
public function dishes()
{
# Требует название таблицы dishe_order, поэтому прописываем явно
# Добавление в ответ полей из связанной таблицы order_dishe
return $this->belongsToMany(Dishe::class, 'order_dishe')
->withPivot(['id', 'price', 'quantity', 'comment', 'paid_back_at'])
->orderByPivot('id', 'desc')
->withTimestamps();
}
1. Отключать тариф по крону в 00 00 00 у всех, у кого valid_till просрочился
2. Отключать тариф только при: переходе на другой или продление нового
public function lastTariff() {
return $this->hasOne(ProjectTariff::class)->NotActive()->orderBy('id', 'desc');
}
public function scopeActiveNow($query) {
return $query
->where('active', 1)
->where('valid_from', '<=', now())
->where('valid_till', '>=', now());
}
Но я Вас услышал, возможно, вы и правы. Попробую переделать, если это возможно, т. к. не хочется писать каждый раз:
И еще понял, параметры, похоже, не нужно передавать в полиси, можно же их вытащить из request()