AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
1 每个控制器开头都有权限说明数组: ``` rotected $noNeedLogin = []; //无需登录的方法,同时也就不需要鉴权了 protected $noNeedRight = []; //无需鉴权的方法,但需要登录 //其他不在这两个数组里面的的方法就是需要鉴权的 ``` 把对应的方法名称,写入到对应的数组中,就会自动检测权限;如果数组中填入"*",或者直接就是一个星号字符串,则表示全部权限; 如果方法名不写入任何权限数组中,则会被当做需要鉴权!!!这种模式更安全, 不特意写明则默认需要高安全性的检查! 2 权限的鉴定: 使用的类:extend\fast\Auth.php ``` /** * 权限认证类 * 功能特性: * 1,是对规则进行认证,不是对节点进行认证。用户可以把节点当作规则名称实现对节点进行认证。 * $auth=new Auth(); $auth->check('规则名称','用户id') * 2,可以同时对多条规则进行认证,并设置多条规则的关系(or或者and) * $auth=new Auth(); $auth->check('规则1,规则2','用户id','and') * 第三个参数为and时表示,用户需要同时具有规则1和规则2的权限。 当第三个参数为or时,表示用户值需要具备其中一个条件即可。默认为or * 3,一个用户可以属于多个用户组(think_auth_group_access表 定义了用户所属用户组)。我们需要设置每个用户组拥有哪些规则(think_auth_group 定义了用户组权限) * 4,支持规则表达式。 * 在think_auth_rule 表中定义一条规则,condition字段就可以定义规则表达式。 如定义{score}>5 and {score}<100 * 表示用户的分数在5-100之间时这条规则才会通过。 */ ``` 有以下几个功能函数: `public function getGroups($uid)` :`* 根据用户id获取用户组,返回值为数组 ` 通过 uid 查找 中间组 `auth_group_access` 得到这个用户拥有的所有的组,一个用户可能属于多个用户组, 最后得到 这些用户组的信息,里面包含有组的权限 rules(逗号链接的一串权限 id 字符串); `public function getRuleIds($uid)`:把上面 `getGroups` 获得的权限变成一个数组 通过 `$ids = array_merge($ids, explode(',', trim($g['rules'], ',')));` 把 `getGroups` 获得的数组里面的 rules 全部合并到一个数组里面; 然后把相同的元素索引删除(也就是把相同权限删除):`$ids = array_unique($ids);` 最后得到这个用户的所有权限 id; ` public function getRuleList($uid): 获得某个用户的权限列表` 这个函数可以配置成 把权限列表保存到 session 中,就可以不用每次都去查数据库但是也就变成了非实时性,大部分情况下是值得放入 session 的,值得牺牲实时性换取效率; 去权限表把这个用户的全部权限查出来, 通过 `getRuleIds` 得到的权限数组 ids 加到 where 语句中: `$where['id'] = ['in', $ids];` 得到这个用户的 `rules` 数组,循环判断这个 rules 数组:如果这个用户拥有* (全部权限),就直接把这个权限加到 `$rulelist` 中, 否则就要判断这个权限的具体使用条件,所以拥有*号权限,就代表拥有全部; 这里之所以要判断具体使用条件是因为某些情况下,几个权限是 and 的关系 或则 or 的关系, 如果是 and 则用户需要用时具有要求的全部权限他才可以用; 权限表中有一个 `condition` 字段,来记录这个条件; 具体的使用方式 暂不清楚, 等以后找到了作者的说明再来详细记录使用方法; 最后得到这个用户 可用的 权限 数组, 然后再去重一次, 返回 `$rulelist` ; **这几个函数的关系是: `getGroups` 获得用户的角色组信息 ,`getRuleIds` 把 `getGroups` 获得的角色组信息里面的权限信息,合并,去重 得到一个 权限数组;** **`getRuleList` 再通过 `getRuleIds` 查询得到权限的具体信息,然后进行循环判断,得到最终的 这个用户 可用的 权限数组;** 检查权限的函数 check: `public function check($name, $uid, $relation = 'or', $mode = 'url')` 这个函数是 检查 这个用户 是否能用这个权限, 能就返回 true, 不可以用就返回 false; 整个系统进行权限判断都是调用这个方法.