store-manage/app/Models/AdminUser.php

57 lines
1.4 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Support\Collection;
use Slowlyo\OwlAdmin\Admin;
use Slowlyo\OwlAdmin\Models\AdminUser as Model;
class AdminUser extends Model
{
public function roles(): BelongsToMany
{
return $this->belongsToMany(Admin::adminRoleModel(), 'admin_role_users', 'user_id', 'role_id')->withTimestamps();
}
public function allMenus(): Collection
{
$model = Admin::adminMenuModel();
$allMenus = $model::all()->keyBy($this->getKeyName());
if ($this->isAdministrator()) {
return $allMenus;
}
/** @var \Illuminate\Database\Eloquent\Collection */
$roleMenus = $this->roles
->pluck('menus')
->flatten()
->keyBy($this->getKeyName());
$allRoleMenus = $roleMenus->collect();
foreach ($roleMenus as $roleMenu) {
if (is_null($roleMenu->parent_id) || $allRoleMenus->has($roleMenu->parent_id)) {
continue;
}
$parent = $allMenus->get($roleMenu->parent_id);
while ($parent) {
$allRoleMenus->put($parent->id, $parent);
if (is_null($parent->parent_id)) {
break;
}
$parent = $allMenus->get($parent->parent_id);
};
}
unset($allMenus, $roleMenus);
return $allRoleMenus;
}
}