Существует способ передать больше экземпляров Models в методе authorize (policy) с помощью действия 'create' (обычно не требуется экземпляр модели) - PullRequest
0 голосов
/ 23 апреля 2019

Я застрял в проблеме политики. На самом деле у меня есть OrderEventHistoryPolicy и

class OrderEventHistoryPolicy
{
    use HandlesAuthorization;

    /**
     * Determine whether the user can create the order event history.
     *
     * @param  \App\User  $user
     * @param  \App\Models\Order\Order  $order
     */
    public function create(User $user, OrderEventHistory $orderEventHistory, Order $order)
    }

и OrderEventHistoryController

class OrderEventHistoryController extends Controller
{

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \App\Models\Order\Order $order
     */
    public function store(Request $request, Order $order)
    {
        $this->authorize('create',OrderEventHistory::class, $order);
    }
}

Моя цель - передать модель Order в класс политики ( OrderEventHistoryPolicy ), но в соответствии с Документация Laravel 5.8, вы можете просто передать имя класса с помощью action , как 'OrderEventHistoryPolicy'. От Передавая имя класса, я не могу пройти модель заказа (конечно). Вот документация Laravel:

Как обсуждалось ранее, некоторые такие действия, как создание, могут не требовать экземпляра модели. В этих В таких ситуациях вы можете передать имя класса методу авторизации. Имя класса будет использоваться для определения, какую политику использовать при авторизация действия:

public function create(Request $request) {
   $this->authorize('create', Post::class);
   // The current user can create blog posts... 
}

Я думал о том, чтобы передать пустую OrderEventHistory модель, подобную этой:

$this->authorize('create',new OrderEventHistory(), $order);

Но я не уверен, что это "правильный" и "чистый" способ сделать это.

1 Ответ

0 голосов
/ 24 апреля 2019

Вы можете передать массив в authorize():

$this->authorize('create', [new OrderEventHistory(), $order]);

Элементы массива будут переданы методу политики в виде отдельных параметров, поэтому код вашей политики уже верен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...