| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- <?php
- // +----------------------------------------------------------------------
- // | EasyAdmin
- // +----------------------------------------------------------------------
- // | PHP交流群: 763822524
- // +----------------------------------------------------------------------
- // | 开源协议 https://mit-license.org
- // +----------------------------------------------------------------------
- // | github开源项目:https://github.com/zhongshaofa/EasyAdmin
- // +----------------------------------------------------------------------
- namespace app\common\controller;
- use app\admin\service\ConfigService;
- use app\BaseController;
- use app\common\constants\AdminConstant;
- use app\common\service\AuthService;
- use EasyAdmin\tool\CommonTool;
- use think\facade\Env;
- use think\facade\View;
- use think\Model;
- /**
- * Class AdminController
- * @package app\common\controller
- */
- class AdminController extends BaseController
- {
- use \app\common\traits\JumpTrait;
- /**
- * 当前模型
- * @Model
- * @var object
- */
- protected $model;
- /**
- * 字段排序
- * @var array
- */
- protected $sort = [
- 'id' => 'desc',
- ];
- /**
- * 允许修改的字段
- * @var array
- */
- protected $allowModifyFields = [
- 'status',
- 'sort',
- 'remark',
- 'is_delete',
- 'is_auth',
- 'title',
- 'on_sale'
- ];
- /**
- * 不导出的字段信息
- * @var array
- */
- protected $noExportFields = ['delete_time', 'update_time'];
- /**
- * 下拉选择条件
- * @var array
- */
- protected $selectWhere = [];
- /**
- * 是否关联查询
- * @var bool
- */
- protected $relationSearch = false;
- /**
- * 模板布局, false取消
- * @var string|bool
- */
- protected $layout = 'layout/default';
- /**
- * 是否为演示环境
- * @var bool
- */
- protected $isDemo = false;
- /**
- * 会员查询条件
- * @var array
- */
- protected $user_map = [];
- /**
- * 初始化方法
- */
- protected function initialize()
- {
- parent::initialize();
- $this->layout && $this->app->view->engine()->layout($this->layout);
- $this->isDemo = Env::get('easyadmin.is_demo', false);
- $this->viewInit();
- $this->checkAuth();
- }
- /**
- * 模板变量赋值
- * @param string|array $name 模板变量
- * @param mixed $value 变量值
- * @return mixed
- */
- public function assign($name, $value = null)
- {
- return $this->app->view->assign($name, $value);
- }
- /**
- * 解析和获取模板内容 用于输出
- * @param string $template
- * @param array $vars
- * @return mixed
- */
- public function fetch($template = '', $vars = [])
- {
- return $this->app->view->fetch($template, $vars);
- }
- /**
- * 重写验证规则
- * @param array $data
- * @param array|string $validate
- * @param array $message
- * @param bool $batch
- * @return array|bool|string|true
- */
- public function validate(array $data, $validate, array $message = [], bool $batch = false)
- {
- try {
- parent::validate($data, $validate, $message, $batch);
- } catch (\Exception $e) {
- $this->error($e->getMessage());
- }
- return true;
- }
- /**
- * 构建请求参数
- * @param array $excludeFields 忽略构建搜索的字段
- * @return array
- */
- protected function buildTableParames($excludeFields = [])
- {
- $get = $this->request->get('', null, null);
- $page = isset($get['page']) && !empty($get['page']) ? $get['page'] : 1;
- $limit = isset($get['limit']) && !empty($get['limit']) ? $get['limit'] : 15;
- $filters = isset($get['filter']) && !empty($get['filter']) ? $get['filter'] : '{}';
- $ops = isset($get['op']) && !empty($get['op']) ? $get['op'] : '{}';
- // json转数组
- $filters = json_decode($filters, true);
- $ops = json_decode($ops, true);
- $where = [];
- $excludes = [];
- // 判断是否关联查询
- $tableName = CommonTool::humpToLine(lcfirst($this->model->getName()));
- foreach ($filters as $key => $val) {
- if (in_array($key, $excludeFields)) {
- $excludes[$key] = $val;
- continue;
- }
- $op = isset($ops[$key]) && !empty($ops[$key]) ? $ops[$key] : '%*%';
- if ($this->relationSearch && count(explode('.', $key)) == 1) {
- $key = "{$tableName}.{$key}";
- }
- switch (strtolower($op)) {
- case '=':
- $where[] = [$key, '=', $val];
- break;
- case '%*%':
- $where[] = [$key, 'LIKE', "%{$val}%"];
- break;
- case '*%':
- $where[] = [$key, 'LIKE', "{$val}%"];
- break;
- case '%*':
- $where[] = [$key, 'LIKE', "%{$val}"];
- break;
- case 'range':
- [$beginTime, $endTime] = explode(' - ', $val);
- $where[] = [$key, '>=', strtotime($beginTime)];
- $where[] = [$key, '<=', strtotime($endTime)];
- break;
- default:
- $where[] = [$key, $op, "%{$val}"];
- }
- }
- return [$page, $limit, $where, $excludes];
- }
- /**
- * 下拉选择列表
- * @return \think\response\Json
- */
- public function selectList()
- {
- $fields = input('selectFields');
- $data = $this->model
- ->where($this->selectWhere)
- ->field($fields)
- ->select();
- $this->success(null, $data);
- }
- /**
- * 初始化视图参数
- */
- private function viewInit(){
- $request = app()->request;
- list($thisModule, $thisController, $thisAction) = [app('http')->getName(), app()->request->controller(), $request->action()];
- list($thisControllerArr, $jsPath) = [explode('.', $thisController), null];
- foreach ($thisControllerArr as $vo) {
- empty($jsPath) ? $jsPath = parse_name($vo) : $jsPath .= '/' . parse_name($vo);
- }
- $autoloadJs = file_exists(root_path('public') . "static/{$thisModule}/js/{$jsPath}.js") ? true : false;
- $thisControllerJsPath = "{$thisModule}/js/{$jsPath}.js";
- $adminModuleName = config('app.admin_alias_name');
- $isSuperAdmin = session('admin.id') == AdminConstant::SUPER_ADMIN_ID ? true : false;
- $data = [
- 'adminModuleName' => $adminModuleName,
- 'thisController' => parse_name($thisController),
- 'thisAction' => $thisAction,
- 'thisRequest' => parse_name("{$thisModule}/{$thisController}/{$thisAction}"),
- 'thisControllerJsPath' => "{$thisControllerJsPath}",
- 'autoloadJs' => $autoloadJs,
- 'isSuperAdmin' => $isSuperAdmin,
- 'version' => env('app_debug') ? time() : ConfigService::getVersion(),
- ];
- View::assign($data);
- }
- /**
- * 检测权限
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- private function checkAuth(){
- $adminConfig = config('admin');
- $adminId = session('admin.id');
- $expireTime = session('admin.expire_time');
- /** @var AuthService $authService */
- $authService = app(AuthService::class, ['adminId' => $adminId]);
- $currentNode = $authService->getCurrentNode();
- $currentController = parse_name(app()->request->controller());
- // 验证登录
- if (!in_array($currentController, $adminConfig['no_login_controller']) &&
- !in_array($currentNode, $adminConfig['no_login_node'])) {
- empty($adminId) && $this->error('请先登录后台', [], __url(Env::get('easyadmin.admin', '').'/login/index'));
- // 判断是否登录过期
- if ($expireTime !== true && time() > $expireTime) {
- session('admin', null);
- $this->error('登录已过期,请重新登录', [], __url(Env::get('easyadmin.admin', '').'/login/index'));
- }
- }
- // 验证权限
- if (!in_array($currentController, $adminConfig['no_auth_controller']) &&
- !in_array($currentNode, $adminConfig['no_auth_node'])) {
- $check = $authService->checkNode($currentNode);
- !$check && $this->error('无权限访问');
- // 判断是否为演示环境
- if(env('easyadmin.is_demo', false) && app()->request->isPost()){
- $this->error('演示环境下不允许修改');
- }
- }
- }
- /**
- * 严格校验接口是否为POST请求
- */
- protected function checkPostRequest(){
- // if (!$this->request->isPost()) {
- // $this->error("当前请求不合法!");
- // }
- }
- }
|