has($key)){ if ($isAdmin) Cache::tags("authorities:admin")->forever($key,Authority::query()->get()); else Cache::tags("authorities:user")->forever($key,Authority::query()->whereHas("roles",function (Builder $query){ $query->whereHas("users",function (Builder $query){ $query->where(DB::raw("users.id"),Auth::id()); }); })->get()); } return Cache::tags($tag)->get($key); } public function removeAdminAuth() { Cache::tags("authorities:admin")->flush(); } public function removeAllAuth() { Cache::tags("authorities:admin")->flush(); Cache::tags("authorities:user")->flush(); } /** * 格式化为树状结构 * * @param Collection $authorities * @return array */ public function format($authorities) { $authMap = []; foreach ($authorities as $authority){ $item = $authority->toArray(); $item["child"] = []; $authMap[$authority->id] = $item; } foreach ($authorities as $authority){ if ($authority->parent_id){ if (!isset($authMap[$authority->parent_id])){ $authTem = $this->formatAuthority($authMap,$authMap[$authority->id]); if ($authTem)$authMap = $authTem; } else $authMap[$authority->parent_id]["child"][] = $authMap[$authority->id]; unset($authMap[$authority->id]); } } return $authMap; } /** * 递归格式化权限组 * * @param array $authMap * @param array $authorities * * @return array|bool */ private function formatAuthority(array $authMap,array $authorities) { foreach ($authMap as $index=>$data){ if ($data["id"]==$authorities["parent_id"]){ $authMap[$index]["child"][] = $authorities; unset($authMap[$authorities["id"]]); return $authMap; }else{ if ($authMap[$index]["child"]){ $re = $this->formatAuthority($authMap[$index]["child"],$authorities); if ($re){ $authMap[$index]["child"] = $re; return $authMap; } } } } return false; } }