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;
整个系统进行权限判断都是调用这个方法.
- FA的JS调用机制说明
- FA的JS之Fast.api逐个详解
- FA页面渲染时后端传递数据给前端的方式
- FA的ajax查询数据的前后台流程
- FA特有的函数解释
- FA的鉴权Auth类
- extend\fast\Auth.php详解
- application\admin\library\Auth.php详解
- application\common\library\Auth.php详解
- FA的Token机制
- FA管理员(后台)的权限机制
- FA用户(前台和API)的权限机制
- FA在前台模板文件中进行鉴权
- FA的登录页面
- TP类Hook:钩子机制
- TP类Lang:多语言机制
- TP类Config:参数配置机制
- TP类Request:请求类
- TP的模型关联详解
- think-queue队列组件
- Queue.php
- \queue\Connector.php
- \queue\connector\Redis.php
- \queue\Job.php
- queue\job\Redis.php
- PHP规则:正则表达式
- PHP规则:闭包与匿名函数
- 项目架构说明
- 代码架构
- TP数据库where条件的各种写法
