禁止访问功能

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

禁止访问模块

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


/**
 * Middleware config
 * @return
 */
module.exports = {
    list: [], //加载的中间件列表
    config: { //中间件配置 
        router: {
            multi_modules: true, //开启多模块支持
            deny_modules: ['common'], //禁止访问的模块(多模块模式)
        }
    }
};

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

禁止访问控制器

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


/**
 * Middleware config
 * @return
 */
module.exports = {
    list: ['cache', 'view'], //加载的中间件列表
    config: { //中间件配置 
        router: {
            deny_controller: ['api'], //禁止访问的控制器
        }
    }
};

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

禁止访问控制器方法

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

const {controller} = require('thinkkoa');

module.exports = class extends controller {

    init() {
        ...
    }

    __before() {

    }

    __empty(){

    }

    _before_index() {

    }
}

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


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

中间件返回禁止访问

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

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