314 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			314 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						|||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						|||
| 
								 | 
							
								// | likeshop开源商城系统
							 | 
						|||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						|||
| 
								 | 
							
								// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
							 | 
						|||
| 
								 | 
							
								// | gitee下载:https://gitee.com/likeshop_gitee
							 | 
						|||
| 
								 | 
							
								// | github下载:https://github.com/likeshop-github
							 | 
						|||
| 
								 | 
							
								// | 访问官网:https://www.likeshop.cn
							 | 
						|||
| 
								 | 
							
								// | 访问社区:https://home.likeshop.cn
							 | 
						|||
| 
								 | 
							
								// | 访问手册:http://doc.likeshop.cn
							 | 
						|||
| 
								 | 
							
								// | 微信公众号:likeshop技术社区
							 | 
						|||
| 
								 | 
							
								// | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用,未经许可不能去除前后端官方版权标识
							 | 
						|||
| 
								 | 
							
								// |  likeshop系列产品收费版本务必购买商业授权,购买去版权授权后,方可去除前后端官方版权标识
							 | 
						|||
| 
								 | 
							
								// | 禁止对系统程序代码以任何目的,任何形式的再发布
							 | 
						|||
| 
								 | 
							
								// | likeshop团队版权所有并拥有最终解释权
							 | 
						|||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						|||
| 
								 | 
							
								// | author: likeshop.cn.team
							 | 
						|||
| 
								 | 
							
								// +----------------------------------------------------------------------
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace app\common\basics;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								use app\admin\server\AuthServer;
							 | 
						|||
| 
								 | 
							
								use app\common\server\ConfigServer;
							 | 
						|||
| 
								 | 
							
								use app\common\server\UrlServer;
							 | 
						|||
| 
								 | 
							
								use app\common\utils\Time;
							 | 
						|||
| 
								 | 
							
								use think\App;
							 | 
						|||
| 
								 | 
							
								use think\Controller;
							 | 
						|||
| 
								 | 
							
								use think\exception\HttpResponseException;
							 | 
						|||
| 
								 | 
							
								use think\facade\Config;
							 | 
						|||
| 
								 | 
							
								use think\facade\Debug;
							 | 
						|||
| 
								 | 
							
								use think\facade\View;
							 | 
						|||
| 
								 | 
							
								use think\Response;
							 | 
						|||
| 
								 | 
							
								use app\common\model\system\SystemLog;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								/**
							 | 
						|||
| 
								 | 
							
								 * 后台基类
							 | 
						|||
| 
								 | 
							
								 * Class AdminBase
							 | 
						|||
| 
								 | 
							
								 * @Author FZR
							 | 
						|||
| 
								 | 
							
								 * @package app\common\basics
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								abstract class AdminBase
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * Request实例
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    protected $request;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 应用实例
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    protected $app;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 管理员ID
							 | 
						|||
| 
								 | 
							
								     * @var null
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    protected $adminId = null;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 管理员信息
							 | 
						|||
| 
								 | 
							
								     * @var null
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    protected $adminUser = null;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 逻辑
							 | 
						|||
| 
								 | 
							
								     * @var
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    protected $logic;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 验证器
							 | 
						|||
| 
								 | 
							
								     * @var
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    protected $validate;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 不需要登录的方法
							 | 
						|||
| 
								 | 
							
								     * @var array
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public $like_not_need_login = [];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * js数据
							 | 
						|||
| 
								 | 
							
								     * @var array
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    protected $js_data = [];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 分页
							 | 
						|||
| 
								 | 
							
								     * @var int
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public $page_no = 1;
							 | 
						|||
| 
								 | 
							
								    public $page_size = 15;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 模板颜色
							 | 
						|||
| 
								 | 
							
								     * @var string
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public $view_theme_color = '';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 构造方法
							 | 
						|||
| 
								 | 
							
								     * @access public
							 | 
						|||
| 
								 | 
							
								     * @param  App  $app  应用对象
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function __construct(App $app)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $this->app     = $app;
							 | 
						|||
| 
								 | 
							
								        $this->request = $this->app->request;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        // 控制器初始化
							 | 
						|||
| 
								 | 
							
								        $this->initialize();
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 初始化
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    protected function initialize()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        //默认设置参数
							 | 
						|||
| 
								 | 
							
								        $this->initConfig();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //验证登录
							 | 
						|||
| 
								 | 
							
								        $this->checkLogin();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //验证权限
							 | 
						|||
| 
								 | 
							
								        $this->checkAuth();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //默认页面参数
							 | 
						|||
| 
								 | 
							
								        $this->setViewValue();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        // 系统日志
							 | 
						|||
| 
								 | 
							
								        $this->log();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        return true;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    //系统日志
							 | 
						|||
| 
								 | 
							
								    protected function log()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        if(request()->action() != 'login') {
							 | 
						|||
| 
								 | 
							
								            $data = [
							 | 
						|||
| 
								 | 
							
								                'admin_id' => $this->adminId,
							 | 
						|||
| 
								 | 
							
								                'name' => $this->adminUser['name'],
							 | 
						|||
| 
								 | 
							
								                'account' => $this->adminUser['account'],
							 | 
						|||
| 
								 | 
							
								                'create_time' => time(),
							 | 
						|||
| 
								 | 
							
								                'uri' => request()->baseUrl(),
							 | 
						|||
| 
								 | 
							
								                'type' => request()->method(),
							 | 
						|||
| 
								 | 
							
								                'param' => json_encode(request()->param(),JSON_UNESCAPED_UNICODE),
							 | 
						|||
| 
								 | 
							
								                'ip' => request()->ip()
							 | 
						|||
| 
								 | 
							
								            ];
							 | 
						|||
| 
								 | 
							
								            SystemLog::create($data);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * Notes: 基础配置参数
							 | 
						|||
| 
								 | 
							
								     * @author 段誉(2021/4/9 14:18)
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    protected function initConfig()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $this->adminUser = session('admin_info');
							 | 
						|||
| 
								 | 
							
								        $this->adminId = session('admin_info.id');
							 | 
						|||
| 
								 | 
							
								        //分页参数
							 | 
						|||
| 
								 | 
							
								        $page_no = (int)$this->request->get('page_no');
							 | 
						|||
| 
								 | 
							
								        $this->page_no = $page_no && is_numeric($page_no) ? $page_no : $this->page_no;
							 | 
						|||
| 
								 | 
							
								        $page_size = (int)$this->request->get('page_size');
							 | 
						|||
| 
								 | 
							
								        $this->page_size = $page_size && is_numeric($page_size) ? $page_size : $this->page_size;
							 | 
						|||
| 
								 | 
							
								        $this->page_size = min($this->page_size, 100);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * 设置视图全局变量
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    private function setViewValue()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $app = Config::get('project');
							 | 
						|||
| 
								 | 
							
								        View::assign([
							 | 
						|||
| 
								 | 
							
								            'view_env_name'     => $app['env_name'],
							 | 
						|||
| 
								 | 
							
								            'view_admin_name'   => $app['admin_name'],
							 | 
						|||
| 
								 | 
							
								            'view_theme_color'  => $app['theme_color'],
							 | 
						|||
| 
								 | 
							
								            'view_theme_button' => $app['theme_button'],
							 | 
						|||
| 
								 | 
							
								            'front_version'     => $app['front_version'],
							 | 
						|||
| 
								 | 
							
								            'version'           => $app['version'],
							 | 
						|||
| 
								 | 
							
								            'dateTime'          => Time::getTime(),
							 | 
						|||
| 
								 | 
							
								            'storageUrl'        => UrlServer::getFileUrl('/'),
							 | 
						|||
| 
								 | 
							
								            'company_name'      => ConfigServer::get('copyright', 'company_name')
							 | 
						|||
| 
								 | 
							
								        ]);
							 | 
						|||
| 
								 | 
							
								        $this->assignJs('image_upload_url', '');
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * Notes: 检查登录
							 | 
						|||
| 
								 | 
							
								     * @author 段誉(2021/4/9 14:05)
							 | 
						|||
| 
								 | 
							
								     * @return bool
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    protected function checkLogin()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        //已登录的访问登录页
							 | 
						|||
| 
								 | 
							
								        if ($this->adminUser && !$this->isNotNeedLogin()) {
							 | 
						|||
| 
								 | 
							
								            return true;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //已登录的访问非登录页
							 | 
						|||
| 
								 | 
							
								        if ($this->adminUser && $this->isNotNeedLogin()) {
							 | 
						|||
| 
								 | 
							
								            $this->redirect(url('index/index'));
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //未登录的访问非登录页
							 | 
						|||
| 
								 | 
							
								        if (!$this->adminUser && $this->isNotNeedLogin()) {
							 | 
						|||
| 
								 | 
							
								            return true;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //未登录访问登录页
							 | 
						|||
| 
								 | 
							
								        $this->redirect(url('login/login'));
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * Notes: 验证登录角色权限
							 | 
						|||
| 
								 | 
							
								     * @author 段誉(2021/4/13 11:34)
							 | 
						|||
| 
								 | 
							
								     * @return bool
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    protected function checkAuth()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        //未登录的无需权限控制
							 | 
						|||
| 
								 | 
							
								        if (empty(session('admin_info'))) {
							 | 
						|||
| 
								 | 
							
								            return true;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //如果id为1,视为系统超级管理,无需权限控制
							 | 
						|||
| 
								 | 
							
								        if (session('admin_info.id') == 1) {
							 | 
						|||
| 
								 | 
							
								            return true;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //权限控制判断
							 | 
						|||
| 
								 | 
							
								        $controller_action = request()->controller() . '/' . request()->action();// 当前访问
							 | 
						|||
| 
								 | 
							
								        $controller_action = strtolower($controller_action);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //没有的权限
							 | 
						|||
| 
								 | 
							
								        $none_auth = AuthServer::getRoleNoneAuthUris(session('admin_info.role_id'));
							 | 
						|||
| 
								 | 
							
								        if (empty($none_auth) || !in_array($controller_action, $none_auth)) {
							 | 
						|||
| 
								 | 
							
								            //通过权限控制
							 | 
						|||
| 
								 | 
							
								            return true;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        $this->redirect(url('dispatch/dispatch_error',['msg' => '权限不足,无法访问']));
							 | 
						|||
| 
								 | 
							
								        return false;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * Notes: js
							 | 
						|||
| 
								 | 
							
								     * @param $name
							 | 
						|||
| 
								 | 
							
								     * @param $value
							 | 
						|||
| 
								 | 
							
								     * @author 段誉(2021/4/9 14:23)
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    protected function assignJs($name, $value)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        $this->js_data[$name] = $value;
							 | 
						|||
| 
								 | 
							
								        $js_code = "<script>";
							 | 
						|||
| 
								 | 
							
								        foreach ($this->js_data as $name => $value) {
							 | 
						|||
| 
								 | 
							
								            if (is_array($value)) {
							 | 
						|||
| 
								 | 
							
								                $value = json_encode($value);
							 | 
						|||
| 
								 | 
							
								            } elseif (!is_integer($value)) {
							 | 
						|||
| 
								 | 
							
								                $value = '"' . $value . '"';
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            $js_code .= $name . '=' . $value . ';';
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $js_code .= "</script>";
							 | 
						|||
| 
								 | 
							
								        View::assign('js_code', $js_code);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * Notes: 是否无需登录
							 | 
						|||
| 
								 | 
							
								     * @author 段誉(2021/4/9 14:03)
							 | 
						|||
| 
								 | 
							
								     * @return bool
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    private function isNotNeedLogin()
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        if (empty($this->like_not_need_login)) {
							 | 
						|||
| 
								 | 
							
								            return false;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        $action = strtolower(request()->action());
							 | 
						|||
| 
								 | 
							
								        $data = array_map('strtolower', $this->like_not_need_login);
							 | 
						|||
| 
								 | 
							
								        if (!in_array($action, $data)) {
							 | 
						|||
| 
								 | 
							
								            return false;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        return true;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    /**
							 | 
						|||
| 
								 | 
							
								     * Notes: 自定义重定向
							 | 
						|||
| 
								 | 
							
								     * @param mixed ...$args
							 | 
						|||
| 
								 | 
							
								     * @author 段誉(2021/4/9 14:04)
							 | 
						|||
| 
								 | 
							
								     */
							 | 
						|||
| 
								 | 
							
								    public function redirect(...$args)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        throw new HttpResponseException(redirect(...$args));
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								}
							 |