Junior: питання на співбесіді з теми «Authorization»
Найпопулярніші питання з реальних Laravel/PHP співбесід для всіх рівнів
Всі теми
API
Artisan
Authentication
Authorization
Blade
Broadcasting
Caching
Collections
Database
Debugging
Eloquent
Enums
Filament
Files
HTTP та Request
Mail
Middleware
MVC та архітектура
Notifications
Pagination
PHP
Queues
Routing
Scheduling
Search
Seeder
Service Container
Testing
Архітектура
Безпека
Валідація
Конфігурація
Локалізація
Міграції
Сесії
1 питання
Права описують у Gate або Policy, а перевіряють у трьох місцях: контролері, шаблоні й формі запиту.
У контролері - authorize(), який кидає 403 сам:
public function update(Request $request, Post $post)
{
$this->authorize('update', $post);
// сюди дійде лише той, кому можна
}
Або через фасад, коли потрібна саме перевірка, а не зупинка:
if (Gate::allows('update', $post)) {
// ...
}
if ($request->user()->cannot('update', $post)) {
abort(403);
}
У Blade - директиви, які ховають те, чого не можна:
@can('update', $post)
<a href="{{ route('posts.edit', $post) }}">Редагувати</a>
@endcan
@cannot('update', $post)
<span>Тільки перегляд</span>
@endcannot
У маршруті - middleware can:
Route::put('/posts/{post}', [PostController::class, 'update'])
->middleware('can:update,post');
Важливо: @can у шаблоні лише ховає кнопку. Це зручність для користувача, а не захист - без перевірки в контролері запит усе одно можна надіслати вручну. Перевірка на сервері обовʼязкова завжди, навіть коли кнопки не видно.