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));
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| } |