diff --git a/application/admin/behavior/ApiPermission.php b/application/admin/behavior/ApiPermission.php index 9a1c39e..1d9d4e9 100644 --- a/application/admin/behavior/ApiPermission.php +++ b/application/admin/behavior/ApiPermission.php @@ -1,6 +1,14 @@ */ @@ -27,12 +35,12 @@ class ApiPermission { */ public function run() { $request = Request::instance(); - $route = $request->routeInfo(); + $route = $request->param(); $header = config('apiAdmin.CROSS_DOMAIN'); $ApiAuth = $request->header('ApiAuth', ''); $userInfo = cache('Login:' . $ApiAuth); $userInfo = json_decode($userInfo, true); - if (!$this->checkAuth($userInfo['id'], $route['route'])) { + if (!$this->checkAuth($userInfo['id'], $route)) { $data = ['code' => ReturnCode::INVALID, 'msg' => '非常抱歉,您没有权限这么做!', 'data' => []]; return json($data, 200, $header); @@ -52,9 +60,23 @@ class ApiPermission { private function checkAuth($uid, $route) { $isSupper = Tools::isAdministrator($uid); if (!$isSupper) { + $keys = array_keys($route); $rules = $this->getAuth($uid); - - return in_array($route, $rules); + $baseUrl = $keys[0]; + if(isset($rules[$baseUrl])){ + if($rules[$baseUrl]['all']==1){ + return true; + }else{ + $intersect = array_intersect_assoc($route,$rules[$baseUrl]['query']); + if(sizeof(array_diff_assoc($rules[$baseUrl]['query'],$intersect))==0){ + return true; + }else{ + return false; + } + } + }else{ + return false; + } } else { return true; } @@ -79,14 +101,21 @@ class ApiPermission { foreach ($openGroup as $group) { $openGroupArr[] = $group->id; } - $allRules = (new AdminAuthRule())->whereIn('groupId', $openGroupArr)->select(); - if (isset($allRules)) { + $allRulesUrl = (new AdminAuthRule())->whereIn('groupId', $openGroupArr)->column('url'); + if (isset($allRulesUrl)) { $rules = []; - foreach ($allRules as $rule) { - $rules[] = $rule->url; + foreach ($allRulesUrl as $rule) { + $query = parse_url($rule); + $route = '/'.$query['path']; + if(!isset($query['query'])){ + $rules[$route]['all'] = 1; + }else{ + parse_str($query['query'],$query_arr); + $rules[$route]['all'] = 0; + $rules[$route]['query'] = $query_arr; + } } $rules = array_unique($rules); - return $rules; } else { return [];