fastadmin(2) 用戶訪問目錄權限分析

fastadmin開發過程中,一個管理表需要添加add方法。根據文檔配置好後,發現不論怎麼樣都提示未授權。這下就很奇怪了,百度沒找到相關資料,只有自己擼袖子分析了。

接上文,選擇的是用戶表的一個擴展插件。這個插件應該是仿後臺管理權限的。先找到控制器繼承的父類

跳過去看看。

找到Auth相關變量

繼續跟過去看,這裏應該就是權限管理的類了。

找到權限檢測

    /**
     * 檢測是否是否有對應權限
     * @param string $path 控制器/方法
     * @param string $module 模塊 默認爲當前模塊
     * @return boolean
     */
    public function check($path = null, $module = null)
    {
        if (!$this->_logined) return false;

        $ruleList = $this->getRuleList();
        $rules = [];
        foreach ($ruleList as $k => $v) {
            $rules[] = $v['name'];
        }
        $url = ($module ? $module : request()->module()) . '/' . (is_null($path) ? $this->getRequestUri() : $path);
        $url = is_null($path) ? $this->getRequestUri() : $path;
        $url = strtolower(str_replace('.', '/', $url));
        var_dump($url);
        //var_dump($rules);
        exit;
        return in_array($url, $rules) ? true : false;
    }

打印出來,發現訪問的Url被解析成爲如下圖。但是訪問url是加了下劃線的device_group。並且我這裏在後臺會員規則中添加的規則也是cloud/device_group/add。使用In_array來判斷,自然返回false。修改規則去掉下劃線,問題解決。

但是在後臺添加訪問index的時候,又是不可以去掉下劃線的,根據tp的規則DeviceGroup控制器需要加下劃線來訪問,不然找不到控制器。但是使用fastadmin的add方法的時候,又不能添加下劃線,這個問題也是很奇葩……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章