##權限規則
權限規則是goAuth的核心,所有module/controller/action類型的請求都要驗證。
基于”權限=url=菜單“的思想,為后端開發節約了非常多的時間和精力。
但并非每一條url都需要添加權限菜單,權限菜單可以通過正則值匹配多條url
**權限規則的6要素:**
1. 是否啟用
2. 是否菜單,如果定義為菜單,則會在后臺菜單中顯示
3. 模塊
4. 控制器
5. 行為
6. 附加參數
* * * * *
**標準匹配**

~~~
auth/User/add
~~~
>上面這條規則會匹配到http://127.0.0.1/index.php/auth/User/add
**通配符匹配**
模塊、控制器、行為的值填寫 * ,表示匹配所有:
~~~
auth/User/*
~~~
>上面這條規則會匹配到auth模塊下的User控制器的所有方法
http://127.0.0.1/index.php/auth/User/add
http://127.0.0.1/index.php/auth/User/edit
當然還有很多其他形式這里不一 一列出,如:
auth/*/index
*/user/edit
**限制匹配**
模塊、控制器、方法的值用小逗號隔開,表示匹配多個:
~~~
auth/User/add,edit,delete
~~~
>上面這條規則會匹配3條url:
http://127.0.0.1/index.php/auth/User/add
http://127.0.0.1/index.php/auth/User/edit
http://127.0.0.1/index.php/auth/User/delete
其他寫法如:
*/User,Group/add,edit,delete
auth,index/\*/add,edit,delete
當action為多個值切又勾選為菜單顯示,取第一個值作為action
**菜單節點**
如果我們的權限規則勾選了菜單顯示,則會自動顯示在菜單欄,并且會生成一個鏈接,實際使用中,有些菜單不需要打開一個鏈接,僅僅作為一個菜單節點,用來展開子菜單,這樣的節點菜單,除了菜單名字 以外的參數全部填空就行了。

**附加參數**
權限規則分為有參規則和無參規則
附加參數與Request::instance()->param()匹配,如果有參規則被匹配中,其他同時被匹配中的無參規則將失效。
我們添加一條編輯用戶的權限如下
~~~
auth/User/edit
~~~
>會匹配中下面的鏈接
http://127.0.0.1/index.php/auth/User/edit
http://127.0.0.1/index.php/auth/User/edit/id/5
http://127.0.0.1/index.php/auth/User/edit?id=5
只要用戶被分配了 “auth/User/edit” 的權限就可以對所有用戶進行編輯,如果我們需要對id=5的用戶進行一些限制,需要分配了權限才能修改,我們可以添加一條規則如下:

~~~
auth/User/edit?id=5
~~~
這時候擁有了 “auth/User/edit” 權限的用戶雖然能對其他用戶進行編輯,但是不能編輯id=5的用戶
http://127.0.0.1/index.php/auth/User/edit/id/4 是可以正常訪問的
http://127.0.0.1/index.php/auth/User/edit/id/5 則不能訪問
只有擁有了 “auth/User/edit?id=5 ”權限的用戶才能對id=5的用戶進行編輯。
>參數可以是多個,規則同上,
其他寫法說明:
?id : isset($param['id'])
?id=/[0-9]+/ : isset($param['id']) && $param['id'] 是數字
?type=post&id=/[0-9]{2}/ : $param['type'] = 'post' 且 $param['id'] 是兩位數字
**實時驗證**
默認情況下,每次權限驗證以用戶登錄時的權限為準,如果想每次請求都更新用戶權限,需要修改配置文件
~~~
'auth' => [
// 權限開關
'auth_on' => 1,
// 認證方式,0為登錄認證;1為實時認證;n為n分鐘更新權限緩存。
'auth_type' => 1,
]
~~~
>如果是大于1的數字,填寫5,表示5分鐘更新一次