Merhaba,
user firm pivot tablo yapılabilir.
User model
/**
* Get the firms
*
* @return \Illuminate\Datebase\Eloquent\Relations\BelongsToMany
*/
public function firms()
{
return $this->belongsToMany('App\Models\Firm');
}
/**
* Get a list of firm ids
*
* @return array
*/
public function getFirmListAttribute()
{
return $this->firms->pluck('id','id')->toArray();
}
LoginController.php
kullanıcı giriş yaptığında yetkili olduğu firmaları session a kaydetmek için LoginController.php authenticated() methodu kullanılabilir.
/**
* The user has been authenticated.
*
* @param \Illuminate\Http\Request $request
* @param mixed $user
* @return mixed
*/
protected function authenticated(Request $request, $user)
{
session(['auth_firm_list' => $user->firm_list]);
}
(ek bilgi : global scope de auth() bilgisi alınamadığı için session kullanıldı)
global veya local scope kullanılabilir
global FirmScope.php
<?php
namespace App\Models\Scopes;
use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Request;
class FirmScope implements Scope
{
/**
* Apply the scope to a given Eloquent query builder.
*
* @param \Illuminate\Database\Eloquent\Builder $builder
* @param \Illuminate\Database\Eloquent\Model $model
* @return void
*/
public function apply(Builder $builder, Model $model)
{
$builder->whereIn($model->getTable().'.firm_id', session('auth_firm_list'));
}
}
ürünler tablosunda firm_id alanı bulunuyor..
Product.php modeli
use App\Models\Scopes\FirmScope;
.
.
.
/**
* The "booting" method of the model.
*
* @return void
*/
protected static function boot()
{
parent::boot();
static::addGlobalScope(new FirmScope);
}
tüm eloquent sorgularına tanımlanan scope sorgusu eklenecektir.
global scope bilgi :
https://laravel.com/docs/5.4/eloquent#global-scopes
ek olarak düzenleme gibi işlemleri tek bir yerden kontrol etmek için Policy yazılabilir.
/**
* Determine whether the user can update the product.
*
* @param \App\User $user
* @param \App\Models\Product $product
* @return mixed
*/
public function update(User $user, Product $product)
{
// return $user->can('update.products') && in_array($product->firm_id, session('auth_firm_list'));
return in_array($product->firm_id, session('auth_firm_list'));
}
İyi çalışmalar..