在特定的情况下我们的应用会扔出一些异常 .. 比如检查用户登录状态的时候,如果用户没登录,就会发生 InvalidSession 这个异常 .. 用户密码不匹配,会发生 PasswordMisMatchException ..
当在应用里出现这些异常情况的时候,我们可以设计一下具体怎么样去处理这些异常 .. 下面我们自己去定义一个异常 .. 比如在检查文章作者是否是当前登录用户的这个中件间里,如果发现登录用户不是内容的作者 .. 我们可以扔出一个异常 ..
先去创建一个异常 ... 在命令行的下面 ... 执行一下 adonis make:exception .. 名字可以是 PermissionCheckException ..
创建的这些异常,默认会在 app .. Exceptions 这里 ... 打开这个 PermissionCheckException .. 异常就是一个类 .. 你可以在这个类里添加 handle 方法,自己来处理这个异常 ..
再找到之前我们创建的 Own 这个中间件 ..
先导入一个 PermissionCheckException ... 位置是 App/Exceptions/PermissionCheckException ..
在 Own 的 handle 方法里面 .. 判断了当前用户是否拥有请求的内容 .. 先把里面的代码剪切一下 .. 一会在处理异常的时候会用到它 ..
现在我们可以在这里 throw 一个异常 .. 这个异常就是 PermissionCheckException ...
第一个参数是错误信息 .. Permission check exception ... 第二个参数是 http 的状态码 .. 检查权限出现问题,这个状态码应该是 403 .. 第三个参数是一个错误代码 .. 暂时我们先不设置 ..
试验
回到浏览器,再试一下 ... 现在登录的用户是小雪 ... 要请求编辑的这个文章内容属于王皓 ...
这样就会出现一个 PermissionCheckException 这个异常 ... 错误信息就是我们设置的 Permission check exception .. 状态码是 403 ..
处理
下面我们在 hook 里面,去处理一下这个异常 ... 打开 start .. hooks.js ..
这里之前我们已经导入了这个 Exception ...
再用一下这个 Exception 上的 handle .. 处理一下 PermissionCheckException 这个异常 .. 一个回调 .. 有个 error ... 一个 context 参数 .. 我们需要用的是 session ... 还有 response ...
处理这个异常要做的事情就是 flash 一条信息 .. 然后 redirect back ...
再去试一下 ...
让小雪编辑一下不属于她的文章内容 ... 触发 PermissionCheckException ... 处理这个异常,会 flash 一条信息 .. redirect 回来的时候,会显示这条信息 .. 提示用户没有权限做这件事 ..