Merhaba, laracast da laravel 5.1 de çekilen "ACL in Laravel: Roles and Permissions" videosundan yararlanarak rol, yetki ve kullanıcı rollerini oluşturdum.
Tablolarda role = admin, editor ... ,
permissions tablosu = index_post, edit_post, delete_post....
role_user tablosunda role_id user_id = 1,1 2,1 şeklinde.
Balde kısmında @can('edit_form') Güncelle @endcan şeklinde kontrol sağlanıyor fakat url yi "site.com/post/1/edit" olarak çağırdığımda PostController a geçiş yapıyor.
Kullanıcının yetkisini Controllerda nasıl kontrol edebilirim? Laravel policy denedim, o da sadece postu açan kullanıcıyı kapsıyor (doğru anladıysam)
AuthServiceProvider ım şu şekilde;
AuthServiceProvider
public function boot()
{
$this->registerPolicies();
// Rol ve yetkiler // Laravel'in Kapısı ile izinleri dinamik olarak kaydedin.
foreach ($this->getPermissions() as $permission) {
Gate::define($permission->name, function ($user) use ($permission) {
return $user->hasPermission($permission);
});
}
}
// Yetkileri al | Site izinleri koleksiyonunu getir.
protected function getPermissions()
{
return Permission::with('roles')->get();
}
User Modelinde
...
public function roles()
{
return $this->belongsToMany(Role::class);
}
// Verilen rolü kullanıcıya atayın.
public function assigRole($role)
{
return $this->roles()->save(
Role::whereName($role)->firstOrFail()
);
}
// Kullanıcı Rol kontrolü // $user->haRole('menager')
// Kullanıcının verilen role sahip olup olmadığını belirleyin.
public function hasRole($role)
{
if (is_string($role)) { // contains = içeren
return $this->roles->contains('name', $role);
}
// intersection == kesişim
return !! $role->intersect($this->roles)->count();
}
//Kullanıcının verilen izni gerçekleştirip gerçekleştiremeyeceğini belirleyin.
public function hasPermission(Permission $permission)
{
return $this->hasRole($permission->roles);
}