ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
##权限规则 权限规则是goAuth的核心,所有module/controller/action类型的请求都要验证。 基于”权限=url=菜单“的思想,为后端开发节约了非常多的时间和精力。 但并非每一条url都需要添加权限菜单,权限菜单可以通过正则值匹配多条url **权限规则的6要素:** 1. 是否启用 2. 是否菜单,如果定义为菜单,则会在后台菜单中显示 3. 模块 4. 控制器 5. 行为 6. 附加参数 * * * * * **标准匹配** ![](https://box.kancloud.cn/9d5d3722f7193c4ef9aa51541344d8f7_353x462.png) ~~~ 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 **菜单节点** 如果我们的权限规则勾选了菜单显示,则会自动显示在菜单栏,并且会生成一个链接,实际使用中,有些菜单不需要打开一个链接,仅仅作为一个菜单节点,用来展开子菜单,这样的节点菜单,除了菜单名字 以外的参数全部填空就行了。 ![](https://box.kancloud.cn/c978e624f063f4aece08c6b0910162b7_312x363.png) **附加参数** 权限规则分为有参规则和无参规则 附加参数与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的用户进行一些限制,需要分配了权限才能修改,我们可以添加一条规则如下: ![](https://box.kancloud.cn/04b77ea0fd9395f97f76a358eeaadf9d_312x265.png) ~~~ 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分钟更新一次