用户登录

假设在使用这个 Own 中间件的时候,提供的参数的第一个值就是要检查的内容的类型 .. 这里我们把它设置成 post ...

然后回到这个 Own Middleware .. 在 handle 方法里面 .. 添加一个 entityType .. 它的值就是 args 里的第一个项目的值 ...

下面再添加一个 entity ... 它是一个空白的对象 ..

然后再判断一下 ... 看一下,如果 entityType 等于 post ... 我们就让这个 entity 的值等于 await ,用一下 Post 上的 find ... 资源的 id 是 params.id

在文件的顶部,再导入 Post 这个模型 .. 位置是 App/Models/Post ..

然后把需要用的 params ,从 context 里解构出来 .. 继续再编辑这个 handle 方法 ..

添加一个 own ... 它的值是判断的结果 .. 看一下 entity.user_id 是不是等于 auth.user.id ... 意思就是看看当前请求编辑或者删除的内容的作者,是不是当前登录的用户 ... 再把需要的 auth 解构出来 ...

做一个判断 ... 如果 !own 并且 ... auth.user.id 不等于 1 ... 意思就是 .. 用户即不是文章的作者,也不是管理员 ..

这个时候可以暂时先用一下 session ... flash 一条信息 .. type 是 danger ... message 是 .. You have no permission to do this.

可以再用一下 await session.commit() ... 确定一下已经成功设置了这条 flash 信息 ...

再把需要用的这个 session ... 还有 response 解构出来 ...

试验

现在我们可以再去试一下 ... 当前登录的用户是小雪 ... 先找一个她自己的文章内容 ... 编辑一下 ... 可以打开这个文章的编辑界面 ... 修改一下内容 ... 提交一下修改 ... 可以成功保存对文章内容的修改 ..

下面可以再去找一个不属于小雪的文章内容 ... 按一下编辑链接 ... 在 Own 中间件里一检查,发现当前登录的用户不是管理员,也不是内容的作者 .. 所以就会 flash 一条提示 .. 说用户没有权限做这件事 ..

再切换到管理员身份 ... 随便找一个内容 ... 编辑一下 ... 虽然当前登录的用户不是这个内容的作者,不过他的 id 号是 1 ,我们的应用会认为它是管理员 .. 所以也可以正常打开这个编辑界面 .. 编辑一下内容 ... 再保存一下 ... 也可以成功保存对内容的修改 ...

定义Own Middleware 检查用户是否是文章内容的作者《 Node.js 应用:中间件与异常 》

统计

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

社会化网络

关于

微信订阅号

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