Вы можете иметь возможность create
на ProductPolicy
принимать экземпляр Компании в качестве аргумента, а затем вы можете проверить, что пользователь принадлежит этой компании в политике:
use App\Company;
use App\User;
class ProductPolicy
{
public function create(User $user, Company $company)
{
return $user->company_id === $company->id;
}
...
}
Вы можетевызовите authorize
в вашем контроллере, чтобы использовать ProductPolicy
для авторизации пользователя. Эти методы авторизации могут принимать массив в качестве второго аргумента, который позволяет вам отправлять дополнительные данные [первый аргумент будет моделью для политики, в этом случае он не берет экземпляр, но нам все еще нужно знать, какая модельполитика, которую мы хотим, поэтому она принимает имя класса]. Это позволит проверить способность create
в политике для Продукта и передать ей дополнительное значение $company
:
use App\Company;
use App\Product;
...
public function create(Request $request)
{
$company = Company::findOrFail($request->input('company_id'));
$this->authorize('create', [Product::class, $company]);
return view('product.create', compact('company');
}
Не забудьте зарегистрировать Политику для модели Продукта.
Выесть варианты, как вы хотите сделать авторизацию, поэтому есть разные методы для ее достижения. Зависит от того, что вы предпочитаете или что соответствует вашим текущим потребностям.