用户登录

用户发布的资源,我们就可以认为这个用户拥有这个资源,下面可以设计一个检查用户对某种资源拥有权的功能。要做这种拥有权的检查,可以先准备好用户的 ID,资源的类型,还有资源的 ID,这样我们就可以去查询数据仓库,检查这个用户是不是拥有指定的资源了。

打开 src/auth 下面的 auth.service ,可以在这个文件里找个地方,定义一个检查用户是否拥有指定资源的功能。

在定义的函数支持一个选项参数,可以先定义一个 interface 描述一下这个参数,名字是 PossessOptions,在这个 interface 里面,有一个 resourceId 属性,类型是 number,还有一个 resourceType 属性,类型是 string,还有一个 userId 属性,类型是 number。

然后导出一个函数,名字是 possess ,标记成一个 async 函数,这个函数接受一个 options 参数,类型可以设置成刚才定义的 PossessOptions ,这样在使用这个 possess 的时候,给它提供的 options 参数的值应该是个对象,这个对象里面需要设置 resourceId 资源 ID ,resourceType,资源类型,还有 userId,用户 id 这几个属性。

在函数里可以先解构一下函数的选项参数,把 resourceId,resourceType 还有 userId 解构出来。判断用户是不是拥有指定的资源可以问一下数据仓库。

先准备一个查询 ,定义一个 statement ,用一个字符模板组织一段要执行的 SQL, SELECT 需要的字段可以用 一下 COUNT ,它可以统计结果的数量,统计的是资源 id 的数量,这里插入一个 resourceType 后面加上 id

在 COUNT 外面,用 as 给这个结果字段起个名字叫 count 。

查询最终的结果里面会包含一个 count 字段,它的值应该是 1 或者 0,如果是 1 就表示找到了一条数据记录,也就是用户拥有这个内容资源,如果是 0 就表示没找到数据记录,也就是用户不拥有这个内容资源。

在 FROM 的后面设置一个数据表,可以插入一个 resourceType,表示资源的类型。

下面再用 WHERE 设置一个条件,resourceType.id 等于一个指定的值,AND,并且 userId 也得等于一个特定的值,这里先用 ? 号来代替具体的值。

准备的这段 SQL,假设资源数据表里都有 userId 这个栏目,它的值就是资源作者的 ID。比如在我们的 post 数据表里存储的就是 Post 这种内容资源,这个表里面就有一个 userId 栏目。它的值就是内容作者的 ID。

然后要执行检查拥有权。 const 方括号,data ,把执行结果返回的数组里的第一个项目解构出来,起个名字叫 data。等于 await 等待执行,用一下 connection ,编辑器会自动导入需要的这个 connection

先用一下 promise() 这个方法,接着再调用 query() 这个方法,把要执行的 SQL 交给这个方法,这里就是 statement,这段 SQL 里面用了两个占位符,在这里要提供它们表示的具体的数据,放在一个数组里面,第一个项目是 resourceId,第二个占位符的值是 userId。

最后可以让这个函数提供检查的结果,用户拥有指定的资源就 return true,不拥有就 return false,这里可以判断一下 data 里的第一个项目的 count 属性的值,如果用户拥有指定资源,这个 count 值就是 1,不拥有,这个 count 的值就会是 0 。 如果是 1 就 return true,如果是 0 就 return false。

资源拥有权:定义检查用户是否拥有指定资源的功能《 Node.js 服务端应用开发:访问控制 》

统计

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

社会化网络

关于

微信订阅号

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