用户登录

定义数据表或者字段权限的时候可以使用身份验证变量,它里面包含的东西是就是当前登录的用户相关的数据。SurrealDB 会从请求里提取用户的令牌,根据令牌的 ID,找到对应的用户。

在定义 post 数据表的 select 权限这里,在检查的条件里再用一个 OR ,表示或者,然后 user = $auth.id ,这里用的 $auth 就是身份验证变量,它的值就是一条用户数据。

这样这条权限的意思就是,一般的用户可以查看 status 属性的值是 published 的 post 数据,或者如果 post 数据的 user 属性的值等于当前用户的用户的 id,用户也有权限查看这个 post 数据。也就是用户可以查看自己发布的 post 数据。执行一下。

修改

然后用管理员的身份,执行 SELECT * FROM user; 复制一下“李白” 这个用户的 id, 再修改一下之前创建的这个内容,设置一下 user 属性的值,它的值就是“李白”这个用户的 id。执行一下。

JWT

打开“用户登录”这个请求,复制一下登录成功以后,SurrealDB 给李白这个用户签发的令牌。

测试

再打开“测试用户权限”这个请求,配置一下请求的身份验证,类型选择 Bearer Token,把复制的令牌作为这个 TOKEN 字段的值。

然后发送一下这个请求。这次返回的结果里面会包含一条 post 数据,它的 status 是 draft,但是当前这个用户是这个内容的作者,所以就有权限查看这个内容。

创建、更新、删除

打开“定义数据表权限”,再设置一下 create, update 还有 delete 权限,去掉 NONE,换成 WHERE,条件是 user = $auth.id。执行一下。

打开“测试用户权限”,用 CREATE 创建一条 post 数据,设置一下数据的 CONTENT,里面添加一个 user 属性,值是内容的作者,然后再添加一个 title 属性,再设置一下这个属性的值。

执行一下。提示错误,因为这里少了一个逗号,再执行一下,又提示错误,因为这句查询的结尾需要加上分号。再执行一下。成功创建这个 post 数据。

下面试一下更新一下这个数据,复制一下这个 post 数据的 id。然后执行 UPDATE ,后面加上这个 post 数据的 id,再 SET 一下数据的 status 属性,值是 published。执行一下这个查询,可以成功修改这条 post 数据,因为当前用户是这条数据的作者,也就是当前用户的 id,跟这条数据的 user 属性的值是一样的。

定义权限时使用身份验证变量($auth)《 SurrealDB 多模型数据库:权限管理 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点