123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- <?php
- namespace App\Services\Base;
- use App\Contracts\Repositories\Base\MenuRepository;
- use App\Repositories\Criteria\Base\MenuCriteria;
- use App\Repositories\Eloquent\Base\MenuRepositoryEloquent;
- use App\Repositories\Enums\ModelStatusEnum;
- use App\Repositories\Models\Base\Menu;
- use App\Repositories\Presenters\Base\MenuPresenter;
- use Illuminate\Http\Request;
- class MenuService
- {
- /**
- * @var MenuRepositoryEloquent
- */
- private $menuRepository;
- /**
- * MenuService constructor.
- *
- * @param MenuRepositoryEloquent $menuRepositoryEloquent
- */
- public function __construct(MenuRepositoryEloquent $menuRepositoryEloquent)
- {
- $this->menuRepository = $menuRepositoryEloquent;
- }
- /**
- * @param Request $request
- *
- * @return mixed
- * @throws \Prettus\Repository\Exceptions\RepositoryException
- */
- public function handleList(Request $request)
- {
- $this->menuRepository->pushCriteria(new MenuCriteria($request));
- $this->menuRepository->setPresenter(MenuPresenter::class);
- return $this->menuRepository->searchMenusByPage();
- }
- /**
- * @param $id
- *
- * @return \Illuminate\Database\Eloquent\Model
- */
- public function handleProfile($id)
- {
- $this->menuRepository->setPresenter(MenuPresenter::class);
- return $this->menuRepository->searchMenuBy($id);
- }
- /**
- * @param array $data
- *
- * @return mixed
- * @throws \Prettus\Validator\Exceptions\ValidatorException
- */
- public function handleStore($data)
- {
- $menu = $this->menuRepository->create($data);
- return $menu;
- }
- /**
- * @param array $data
- *
- * @return mixed
- * @throws \Prettus\Validator\Exceptions\ValidatorException
- */
- public function handleUpdate($data)
- {
- $menu = $this->menuRepository->update($data, $data['id']);
- return $menu;
- }
- /**
- * @param Request $request
- *
- * @return mixed
- * @throws \Prettus\Validator\Exceptions\ValidatorException
- */
- public function handleDelete($id)
- {
- return $this->menuRepository->delete($id);
- }
- /**
- * 获取当前用户的菜单及按钮权限
- * @return array
- */
- public function handleMyMenusLists()
- {
- $admin = login_admin();
- $roles = $admin->roles()->get();
- if ($admin->isSuperAdmin()) {
- $menus = $this->menuRepository->where('type', Menu::TYPE_MENU)->where('status', ModelStatusEnum::OK)->select(['id', 'name', 'path', 'parent_id', 'component', 'redirect', 'meta'])->orderByDesc('sort')->orderBy('id')->get()->toArray();
- $buttonPermission = $this->menuRepository->where('type', Menu::TYPE_BTN)->where('status', ModelStatusEnum::OK)->select(['title', 'path'])->get();
- $menus = toTree($menus);
- return compact('menus', 'buttonPermission');
- }
- if ($roles->count() == 1) {
- $role = $roles->first();
- $menus = $role->menus()->where('type', Menu::TYPE_MENU)->where('status', ModelStatusEnum::OK)->select(['id', 'name', 'path', 'parent_id', 'component', 'redirect', 'meta'])->orderByDesc('sort')->get()->toArray();
- $buttonPermission = $role->menus()->where('type', Menu::TYPE_BTN)->where('status', ModelStatusEnum::OK)->select(['title', 'path'])->get();
- $menus = toTree($menus);
- return compact('menus', 'buttonPermission');
- }
- $menus_ids = [];
- $button_permission_ids = [];
- foreach ($roles as $role) {
- $ids = $role->menus()->where('type', Menu::TYPE_MENU)->where('status', ModelStatusEnum::OK)->pluck('id')->toArray();
- $permission_ids = $role->menus()->where('type', Menu::TYPE_BTN)->where('status', ModelStatusEnum::OK)->pluck('id')->toArray();
- $menus_ids = array_merge($menus_ids, $ids);
- $button_permission_ids = array_merge($button_permission_ids, $permission_ids);
- }
- $menus = $this->menuRepository->whereIn('id', $menus_ids)->where('type', Menu::TYPE_MENU)->where('status', ModelStatusEnum::OK)->select(['id', 'name', 'path', 'parent_id', 'component', 'redirect', 'meta'])->orderByDesc('sort')->orderBy('id')->get()->toArray();
- $buttonPermission = $this->menuRepository->whereIn('id', $button_permission_ids)->where('type', Menu::TYPE_BTN)->where('status', ModelStatusEnum::OK)->select(['title', 'path'])->get();
- $menus = toTree($menus);
- return compact('menus', 'buttonPermission');
- }
- }
|