Laravel projemde bazı sayfaları yetkilendirmek istiyorum. Bunun için policy kullandım. Eğer yetki varsa normal bir şekilde sayfa görüntüleniyor. Ancak yetkinin olmadığı kısımda laravelin hata sayfasında "This action is unauthorized" bu uyarıyı veriyor. Bu sayfa için yetkimin olmadığını söylüyor. Eğer yetki yoksa kullanıcıyı, yetkiniz yok sayfasına yönlendirmek istiyorum. Nasıl yapabilirim.
PostPolicy.php
<?php
namespace App\Policies;
use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class PostPolicy
{
use HandlesAuthorization;
/**
* Create a new policy instance.
*
* @return void
*/
public function __construct()
{
//
}
public function create(User $user)
{
return $user->hasRole(['admin','member']);
}
}
AuthServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Post' => 'App\Policies\PostPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
}
}
Kısıtlamanın olacağı fonksiyona da
$this->authorize('create', 'App\Post');
Bu fonksiyonu kullandım. Bu fonksiyondan geriye bir değer dönmediği için istediğimi yapamadım.
Şimdiden teşekkürler.
"This action is unauthorized" hatası geriye 403 hata kodunu göndererek size uyarı verir. Bu sayede 403 hata kodu oluşan sayfalarınızı yönlendirmek için projenizin
resources > views > errors
klasörüne "403.blade.php" dosya adıyla yeni bir sayfa oluşturun ve sayfanızı özelleştirin. Artık projenizdeki tüm 403 hata kodu ile dönen sayfalarınız, bu sayfaya yönlenecektir.
İyi çalışmalar.