Home >PHP Framework >ThinkPHP >How to add permission to specify IP access module configuration in thinkphp5

How to add permission to specify IP access module configuration in thinkphp5

藏色散人
藏色散人forward
2021-03-19 17:27:452499browse

The following tutorial column will introduce to you how to configure thinkphp5 to allow specified IP access module. I hope it will be helpful to friends in need!

thinkphp5 adds the module configuration that allows specified IP access How to add permission to specify IP access module configuration in thinkphp5

Add

in config.php 'allow_module_ip' => ['admin' => '*'], // Set certain IPs to access the specified module

['admin' => '*'] All IPs can access Admin module,

['admin' => ['127.0.0.1','192.168.1.100']] Only these two IPs can access the admin module

It is best to add it in this position

// 禁止访问模块
'deny_module_list'       => ['common'],
// 设置某些ip可以访问指定模块
'allow_module_ip'        => ['admin' => '*'],
// 默认控制器名
'default_controller'     => 'Index',

Need to modify the framework codethinkphp/library/think/App.php

The code location is as follows

public static function module($result, $config, $convert = null) {
        if (is_string($result)) {
            $result = explode('/', $result);
        }
        $request = Request::instance();
        if ($config['app_multi_module']) {
            // 多模块部署
            $module    = strip_tags(strtolower($result[0] ?: $config['default_module']));
            $bind      = Route::getBind('module');
            $available = false;
            if ($bind) {
                // 绑定模块
                list($bindModule) = explode('/', $bind);
                if (empty($result[0])) {
                    $module    = $bindModule;
                    $available = true;
                } elseif ($module == $bindModule) {
                    $available = true;
                }
            } elseif (!in_array($module, $config['deny_module_list']) && is_dir(APP_PATH . $module)) {
                $available = true;
            }
            
            //region 设置了限制ip访问模块, 如:'allow_module_ip' => ['admin'=>['127.0.0.1']]
            if (isset($config['allow_module_ip']) && isset($config['allow_module_ip'][$module])) {
                $allowIps = $config['allow_module_ip'][$module];
                if (!in_array($_SERVER['REMOTE_ADDR'], $allowIps) && $allowIps != '*') {
                    $available = false;
                }

            }
            //end region

            // 模块初始化
            if ($module && $available) {
                // 初始化模块
                $request->module($module);
                $config = self::init($module);
                // 模块请求缓存检查
                $request->cache($config['request_cache'], $config['request_cache_expire'], $config['request_cache_except']);
            } else {
                throw new HttpException(404, 'module not exists:' . $module);
            }
        } else {
            // 单一模块部署
            $module = '';
            $request->module($module);
        }
        
        // ......
}

Related recommendations:

Latest 10 thinkphp video tutorials

The above is the detailed content of How to add permission to specify IP access module configuration in thinkphp5. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:segmentfault.com. If there is any infringement, please contact admin@php.cn delete