定义数据表或者字段权限的时候可以使用身份验证变量,它里面包含的东西是就是当前登录的用户相关的数据。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 属性的值是一样的。