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方法的時候,又不能添加下劃線,這個問題也是很奇葩……