禁止访问功能

ThinkKoa提供了颗粒度比较细的访问控制,不管是中间件、控制器、方法等都可以限制功能被URL访问。

禁止访问模块

中间件配置 app/config/middleware.js

  1. /**
  2. * Middleware config
  3. * @return
  4. */
  5. module.exports = {
  6. list: [], //加载的中间件列表
  7. config: { //中间件配置
  8. router: {
  9. multi_modules: true, //开启多模块支持
  10. deny_modules: ['common'], //禁止访问的模块(多模块模式)
  11. }
  12. }
  13. };

通过上述配置,url访问 http://hostname:port/common/... 这样的地址时,均返回403

禁止访问控制器

中间件配置 app/config/middleware.js

  1. /**
  2. * Middleware config
  3. * @return
  4. */
  5. module.exports = {
  6. list: ['cache', 'view'], //加载的中间件列表
  7. config: { //中间件配置
  8. router: {
  9. deny_controller: ['api'], //禁止访问的控制器
  10. }
  11. }
  12. };

通过上述配置,在单模块模式下,url访问 http://hostname:port/api/... 这样的地址时,均返回403。多模块模式配置项的值为 ['模块名/控制器名']即可。

禁止访问控制器方法

ThinkKoa框架定义: 控制器中方法名不包含指定后缀(默认配置为Action)的方法,都无法被url直接访问。

  1. const {controller} = require('thinkkoa');
  2. module.exports = class extends controller {
  3. init() {
  4. ...
  5. }
  6. __before() {
  7. }
  8. __empty(){
  9. }
  10. _before_index() {
  11. }
  12. }

在控制器方法内返回禁止访问:

  1. indexAction (){
  2. return this.deny(); //输出403禁止访问
  3. }

中间件返回禁止访问

中间件中操作ctx上下文可以直接输出403状态。

  1. ctx.status = 403;
  2. 或者
  3. ctx.throw(403, '禁止访问');