dficoins
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

150 lines
3.4 KiB

<?php
namespace App\Models;
use Dcat\Admin\Models\MenuCache;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Dcat\Admin\Traits\ModelTree;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Spatie\EloquentSortable\Sortable;
class BlockControlAdminMenu extends Model implements Sortable
{
//
protected $table = 'block_control_admin_menu';
use HasDateTimeFormatter,
MenuCache,
ModelTree {
allNodes as treeAllNodes;
ModelTree::boot as treeBoot;
}
/**
* @var array
*/
protected $sortable = [
'sort_when_creating' => true,
];
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['parent_id', 'order', 'title', 'icon', 'uri', 'permission_id'];
/**
* Create a new Eloquent model instance.
*
* @param array $attributes
*/
public function __construct(array $attributes = [])
{
$connection = config('admin.database.connection') ?: config('database.default');
$this->setConnection($connection);
$this->setTable(config('admin.database.menu_table'));
parent::__construct($attributes);
}
/**
* A Menu belongs to many roles.
*
* @return BelongsToMany
*/
public function roles(): BelongsToMany
{
$pivotTable = config('admin.database.role_menu_table');
$relatedModel = config('admin.database.roles_model');
return $this->belongsToMany($relatedModel, $pivotTable, 'menu_id', 'role_id');
}
public function permissions(): BelongsToMany
{
$pivotTable = config('admin.database.permission_menu_table');
$relatedModel = config('admin.database.permissions_model');
return $this->belongsToMany($relatedModel, $pivotTable, 'menu_id', 'permission_id');
}
/**
* Get all elements.
*
* @param bool $force
*
* @return array
*/
public function allNodes(bool $force = false): array
{
if ($force || $this->queryCallbacks) {
return $this->fetchAll();
}
return $this->remember(function () {
return $this->fetchAll();
});
}
/**
* Fetch all elements.
*
* @return array
*/
public function fetchAll(): array
{
return $this->withQuery(function ($query) {
if (static::withPermission()) {
$query = $query->with('permissions');
}
return $query->with('roles');
})->treeAllNodes();
}
/**
* Determine if enable menu bind permission.
*
* @return bool
*/
public static function withPermission()
{
return config('admin.menu.bind_permission') && config('admin.permission.enable');
}
/**
* Determine if enable menu bind role.
*
* @return bool
*/
public static function withRole()
{
return (bool) config('admin.permission.enable');
}
/**
* Detach models from the relationship.
*
* @return void
*/
protected static function boot()
{
static::treeBoot();
static::deleting(function ($model) {
$model->roles()->detach();
$model->permissions()->detach();
$model->flushCache();
});
static::saved(function ($model) {
$model->flushCache();
});
}
}