Merhaba arkadaşlar,
Aşağıdaki şekilde bir yetkilendirme sistemi kullanıyorum. Sistem modüler şekilde çalışıyor. Her modül aktif olduğunda sidebar'a kendi linklerini ekliyor. Her eklenen link yetki ile kontrol ediliyor. Aynı kodlarla linklerin controller dosyaları da içeride kontrol yapıyor. Yapıda herhangi bir sorun yok. Tüm yetkiler olması gerektiği gibi kontrol ediliyor ama çok fazla sorgu yapılıyor. Aşağıdaki resim admin panelinin index sayfasının sorgu sayısını gösteriyor. Herhangi bir modülün içine girdiğimde sorgular arta da biliyor azala da biliyor. Yine de genel olarak çok fazla sorgu oluşuyor. Vagrant sunucuda bile sayfalar yavaş açılıyor. Gerçek sunucuya almadan sorguları düşürmek istiyorum.
Çözüm için öneri sunabilir misiniz.
@can('general', \Modules\Company\Entities\Company::class)
@can('index', \Modules\Company\Entities\Company::class)
<li class="{!! is_active_route('backend.company.index') ? 'active' : '' !!}">Index</li>
@endcan
@can('create', \Modules\Company\Entities\Company::class)
<li class="{!! is_active_route('backend.company.create') ? 'active' : '' !!}">Create</li>
@endcan
@can('edit', \Modules\Company\Entities\Company::class)
<li class="{!! is_active_route('backend.company.index') ? 'active' : '' !!}">Edit</li>
@endcan
@can('view', \Modules\Company\Entities\Company::class)
<li class="{!! is_active_route('backend.company.create') ? 'active' : '' !!}">View</li>
@endcan
@endcan
namespace Modules\Company\Policies;
use EasySlugger\Slugger;
use Modules\Core\Entities\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class CompanyPolicy
{
use HandlesAuthorization;
private $slugger = null;
private $module = 'company';
public function __construct()
{
$this->slugger = new Slugger();
}
private function check_general(User $user){
if($user->hasPermission($this->module,['company.general'])){
return true;
}
return false;
}
public function general(User $user){
return $this->check_general($user);
}
public function index(User $user)
{
if($user->hasPermission($this->module,['company.index']) && $this->check_general($user)){
return true;
}
return false;
}
public function create(User $user)
{
if($user->hasPermission($this->module,['company.create']) && $this->check_general($user)){
return true;
}
return false;
}
public function store(User $user)
{
if($user->hasPermission($this->module,['company.create']) && $this->check_general($user)){
return true;
}
return false;
}
public function view(User $user)
{
if($user->hasPermission($this->module,['company.show']) && $this->check_general($user)){
return true;
}
return false;
}
public function edit(User $user)
{
if($user->hasPermission($this->module,['company.edit']) && $this->check_general($user)){
return true;
}
return false;
}
public function update(User $user)
{
if($user->hasPermission($this->module,['company.edit']) && $this->check_general($user)){
return true;
}
return false;
}
public function delete(User $user)
{
if($user->hasPermission($this->module,['company.delete']) && $this->check_general($user)){
return true;
}
return false;
}
}
public function hasPermission(string $module, array $permissions, $role = null) : bool
{
$hasModule = Permission::where(['slug' => $module])->first();
if($hasModule){
$hasRole = Role::where(['slug' => $role ?: 'admin'])->first();
if ($hasRole){
return $hasRole->permissions()
->wherePivot('role_id', $hasRole->id)
->wherePivot('permission_id', $hasModule->id)
->wherePivotIn('permission_slug', $permissions)
->exists();
}else{
return false;
}
}else{
return false;
}
}