Yetkilendirme(Authorization)’ nin iki yöntemi vardır.
1) Gates(kapı yöntemi)
2) Policy (İlkeler yöntemi)

Bu iki yöntem, genelde tek proje içerisinde sıkça kullanılmaktadır.  Kısacası karma kullanım daha yaygındır.
“gates” ler , ile yetkilendirme basit ve gizlenmeye dayalı bir yaklaşım sağlarken, “policiy” ler controller’ ler gibi mantığını belirli bir Model veya resource etrafında gruplandırır.

2)Policy (İlkeler yöntemi)
Bu iki yöntem, genelde tek proje içerisinde sıkça kullanılmaktadır.  Kısacası karma kullanım daha yaygındır.
“gates” ler , ile yetkilendirme basit ve gizlenmeye dayalı bir yaklaşım sağlarken, “policiy” ler controller’ ler gibi mantığını belirli bir Model veya resource etrafında gruplandırır.
Şimdi artisan komutuyla ilk policy işlemini yapalım.

1
php artisan make:policy UserPolicy

UserPolicy.php dosyamız

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
 
namespace App\Policies;
 
use App\Traits\Permission;
use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;
 
class UserPolicy
{
    use HandlesAuthorization;
    use Permission;
 
    public function standart(User $user)
    {
        return $this->rolePermission($user,1);
    }
 
    public function admin(User $user)
    {
        return $this->rolePermission($user,3);
    }
 
    public function moderator($user)
    {
        return $this->rolePermission($user,2);
    }
 
    public function common($user)
    {
        return $this->commonPermission($user,2,3);
    }
}

Permission.php dosyamız

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
namespace App\Traits;
 
use App\Role;
use App\User;
 
trait Permission
{
    /**
     * @param User $user
     * @param $setId
     *
     * @return bool
     */
    public function rolePermission(User $user,$setId)
    {
        $role_id = Role::find($setId)->id;
        return  $user->role_id === $role_id ? true : false;
    }
 
    public function commonPermission(User $user,$setId1,$setId2)
    {
        $role_one = Role::find($setId1)->id;
        $role_two = Role::find($setId2)->id;
        if($user->role_id === $role_one || $user->role_id === $role_two)
        {
            return true;
        }
        return false;
    }
}

AuthServiceProvider.php dosyamızı ayarlayalım ve gate’ leri tanımlayalım.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use App\Policies\UserPolicy;
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 = [
        User::class => UserPolicy::class
    ];
 
    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();
        Gate::define(‘users.standart’,‘App\Policies\UserPolicy@standart’);
        Gate::define(‘users.moderator’,‘App\Policies\UserPolicy@moderator’);
        Gate::define(‘users.admin’,‘App\Policies\UserPolicy@admin’);
        Gate::define(‘users.common’,‘App\Policies\UserPolicy@common’);
    }
}

UserController.php yetki sistemini kullanacağımız sınıfımız

1
2
3
4
5
6
7
8
9
10
11
12
public function index()
{
    $this->authorize(‘users.admin’);
    $users = User::all();
    return view(‘admin.users.index’,compact(‘users’));
}
 
public function create()
{
    $this->authorize(‘users.admin’);
    return view(‘admin.users.create’);
}

create.blade.php ( bu dosyanın dizin yolu “admin.users.create” ‘dir ) blade dosyamız

Not:
Unutulmaması gereken ozdemirselimcan tag’ leriyle sadece yetki tanımlanırsa – yani controller dan yukarıda görüldüğü
gibi ya da modelden dökümantasyondaki gibi yetki tanımlanmazsa – create işlemine ör: user/create url’i yazılarak yetki delinebilir. Bu güvenlik hususuna dikkat etmek gerekir.