Open szymjab opened 3 months ago
php artisan make:policy PostPolicy --model=Post
namespace App\Policies;
use App\Models\Post;
use App\Models\User;
class PostPolicy
{
public function delete(User $user, Post $post)
{
return $user->id === $post->user_id;
}
}
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Gate::policy(Post::class, PostPolicy::class);
}
}
namespace App\Http\Controllers;
use App\Models\Post;
use App\Models\User;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function delete(Post $post, $User $post)
{
$this->authorize('delete', $post);
$post->delete();
return redirect()->route('dashboard.posts')->with('success', 'Post deleted successfully.');
}
}
Route::resource('posts', PostController::class);
https://github.com/ProgrammingPiotrN/ProjectNewWork/blob/907a705ab417ca83ee2a85d00276f19b4765db8f/Blog/app/Http/Controllers/PostController.php#L43
W MYTRACKO stosujemy podejście, że w customowym requeście w metodzie
authorize
dajemy warunek, który tutaj został umieszczony w kontrolerze.Można to też rozwiązać politykami, ale na nasze potrzeby polityki były zbyt mało elastyczne. Widzę też, że już istnieje częściowo polityka do postu :)
Więcej info o politykach: https://laravel.com/docs/11.x/authorization#creating-policies