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.
117 lines
3.1 KiB
117 lines
3.1 KiB
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\AdminMenu;
|
|
use App\Models\AdminRoleMenu;
|
|
use App\Models\AdminRoles;
|
|
use App\Models\AdminRoleUsers;
|
|
use App\Models\AdminUsers;
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Psr\SimpleCache\InvalidArgumentException;
|
|
|
|
final class AdminMenuService
|
|
{
|
|
/**
|
|
* 用户权限id数组
|
|
* @var array
|
|
*/
|
|
protected array $adminRoleMenus = [];
|
|
|
|
/**
|
|
* @param array $role_ids
|
|
* @return array
|
|
*/
|
|
public static function getRoleMenuUri(array $role_ids): array
|
|
{
|
|
$menu_ids = AdminRoleMenu::query()->whereIn('role_id', $role_ids)
|
|
->pluck('menu_id')->toArray();
|
|
if ($menu_ids) {
|
|
$menuWhere = [['status', '=', 1], ['uri', '<>', '']];
|
|
return AdminMenu::query()->whereIn('id', $menu_ids)
|
|
->where($menuWhere)->pluck('uri')->toArray();
|
|
}
|
|
return [];
|
|
}
|
|
|
|
/**
|
|
* 缓存菜单
|
|
* @param array $adminRoleMenus
|
|
* @return array
|
|
*/
|
|
public function getMenuTreeCacheList(array $adminRoleMenus = []): array
|
|
{
|
|
$this->adminRoleMenus = $adminRoleMenus;
|
|
return $this->getMenuTreeList();
|
|
}
|
|
|
|
/**
|
|
* 获取菜单
|
|
* @param array $menus_id
|
|
* @param int $is_show
|
|
* @return array
|
|
*/
|
|
public function getMenuTreeList(
|
|
array $menus_id = [],
|
|
int $is_show = 0
|
|
): array {
|
|
$model = AdminMenu::query();
|
|
if ($menus_id) {
|
|
$model->wherein('id', $menus_id);
|
|
}
|
|
if ($is_show) {
|
|
$model->where('show', 1);
|
|
}
|
|
$list = $model->orderBy('order')
|
|
->orderBy('id')
|
|
->select()
|
|
->get()
|
|
->toArray();
|
|
return generate_tree($list, 0, $this->adminRoleMenus);
|
|
}
|
|
|
|
/**
|
|
* 获取用户菜单
|
|
* @param $user_id
|
|
* @return array
|
|
*/
|
|
public function getUserMenuTreeList($user_id): array
|
|
{
|
|
$AdminUsers = AdminUsers::find($user_id);
|
|
$roles_id = $AdminUsers->roles()->where('status', 1)->pluck('id')
|
|
->toArray();
|
|
if (!$roles_id) {
|
|
return [];
|
|
}
|
|
$AdminRoles = AdminRoles::find($roles_id[0]);
|
|
$menus_id = $AdminRoles->menus()->where('status', 1)->pluck('id')
|
|
->toArray();
|
|
if (!$menus_id) {
|
|
return [];
|
|
}
|
|
return $this->getMenuTreeList($menus_id, 1);
|
|
}
|
|
|
|
/**
|
|
* 用户角色菜单接口访问权限
|
|
* @param $user_id
|
|
* @return array
|
|
* @throws InvalidArgumentException
|
|
*/
|
|
public static function auth($user_id): array
|
|
{
|
|
$names = 'adminUserRules';
|
|
$key = $names . $user_id;
|
|
$uriArr = Cache::tags($names)->get($key);
|
|
if (!$uriArr) {
|
|
$role_ids = AdminRoleUsers::query()->where('user_id', $user_id)
|
|
->pluck('role_id')->toArray();
|
|
$uriArr = [];
|
|
if ($role_ids) {
|
|
$uriArr = AdminMenuService::getRoleMenuUri($role_ids);
|
|
}
|
|
Cache::tags($names)->set($key, $uriArr, 36000);
|
|
}
|
|
return $uriArr;
|
|
}
|
|
}
|
|
|