mirror of
				https://gitee.com/zoujingli/ThinkAdmin.git
				synced 2025-11-04 13:42:10 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			171 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace controller;
 | 
						|
 | 
						|
use think\Controller;
 | 
						|
use think\Db;
 | 
						|
use think\db\Query;
 | 
						|
 | 
						|
/**
 | 
						|
 * 后台权限基础控制器
 | 
						|
 *
 | 
						|
 * @package controller
 | 
						|
 * @author Anyon <zoujingli@qq.com>
 | 
						|
 * @date 2017/02/13 14:24
 | 
						|
 */
 | 
						|
class BasicAdmin extends Controller {
 | 
						|
 | 
						|
    /**
 | 
						|
     * 页面标题
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $title;
 | 
						|
 | 
						|
    /**
 | 
						|
     * 默认操作数据表
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $table;
 | 
						|
 | 
						|
    /**
 | 
						|
     * 默认检查用户登录状态
 | 
						|
     * @var bool
 | 
						|
     */
 | 
						|
    protected $checkLogin = true;
 | 
						|
 | 
						|
    /**
 | 
						|
     * 默认检查节点访问权限
 | 
						|
     * @var bool
 | 
						|
     */
 | 
						|
    protected $checkAuth = true;
 | 
						|
 | 
						|
    /**
 | 
						|
     * 后台权限控制初始化方法
 | 
						|
     */
 | 
						|
    public function _initialize() {
 | 
						|
        # 用户登录状态检查
 | 
						|
        if ($this->checkLogin || $this->checkAuth) {
 | 
						|
            if (!$this->isLogin()) {
 | 
						|
                $this->redirect('@admin/login');
 | 
						|
            }
 | 
						|
        }
 | 
						|
        # 节点访问权限检查
 | 
						|
        if ($this->checkLogin && $this->checkAuth) {
 | 
						|
            $node = strtolower($this->request->module() . '/' . $this->request->controller() . '/' . $this->request->action());
 | 
						|
            if (!auth($node)) {
 | 
						|
                $this->error('抱歉,您没有访问该模块的权限!');
 | 
						|
            }
 | 
						|
        }
 | 
						|
        # 初始化赋值常用变量
 | 
						|
        if ($this->request->isGet()) {
 | 
						|
            $class_uri = strtolower($this->request->module() . '/' . $this->request->controller());
 | 
						|
            $this->assign('classuri', $class_uri);
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 判断用户是否登录
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function isLogin() {
 | 
						|
        $user = session('user');
 | 
						|
        if (empty($user) || empty($user['id'])) {
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 列表集成处理方法
 | 
						|
     * @param Query $db 数据库查询对象
 | 
						|
     * @param bool $is_page 是启用分页
 | 
						|
     * @param bool $is_display 是否直接输出显示
 | 
						|
     * @param bool $total 总记录数
 | 
						|
     * @return array|string
 | 
						|
     */
 | 
						|
    protected function _list($db = null, $is_page = true, $is_display = true, $total = false) {
 | 
						|
        is_null($db) && $db = Db::name($this->table);
 | 
						|
        is_string($db) && $db = Db::name($db);
 | 
						|
        # 列表排序默认处理
 | 
						|
        if ($this->request->isPost() && $this->request->post('action') === 'resort') {
 | 
						|
            $data = $this->request->post();
 | 
						|
            unset($data['action']);
 | 
						|
            foreach ($data as $key => &$value) {
 | 
						|
                if (false === $db->where('id', intval(ltrim($key, '_')))->update(['sort' => $value])) {
 | 
						|
                    $this->error('列表排序失败,请稍候再试!');
 | 
						|
                }
 | 
						|
            }
 | 
						|
            $this->success('列表排序成功,正在刷新列表!', '');
 | 
						|
        }
 | 
						|
        # 列表显示
 | 
						|
        $result = array();
 | 
						|
        if ($is_page) {
 | 
						|
            $row_page = $this->request->get('rows', cookie('rows'), 'intval');
 | 
						|
            cookie('rows', $row_page >= 10 ? $row_page : 10);
 | 
						|
            $page = $db->paginate($row_page, $total, ['query' => $this->request->get()]);
 | 
						|
            $result['list'] = $page->all();
 | 
						|
            $result['page'] = preg_replace(['|href="(.*?)"|', '|pagination|'], ['data-open="$1" href="javascript:void(0);"', 'pagination pull-right'], $page->render());
 | 
						|
        } else {
 | 
						|
            $result['list'] = $db->select();
 | 
						|
        }
 | 
						|
        if ($this->_callback('_data_filter', $result['list']) === false) {
 | 
						|
            return $result;
 | 
						|
        }
 | 
						|
        !empty($this->title) && $this->assign('title', $this->title);
 | 
						|
        $is_display && exit($this->fetch('', $result));
 | 
						|
        return $result;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 表单默认操作
 | 
						|
     * @param Query $db 数据库查询对象
 | 
						|
     * @param string $tpl 显示模板名字
 | 
						|
     * @param string $pk 更新主键规则
 | 
						|
     * @param array $where 查询规则
 | 
						|
     * @param array $data 扩展数据
 | 
						|
     * @return array|string
 | 
						|
     */
 | 
						|
    protected function _form($db = null, $tpl = null, $pk = null, $where = [], $data = []) {
 | 
						|
        is_null($db) && $db = db($this->table);
 | 
						|
        is_string($db) && $db = db($db);
 | 
						|
        !$db->getTable() && $db->setTable($this->table);
 | 
						|
        is_null($pk) && $pk = $db->getPk();
 | 
						|
        $pk_value = input($pk, isset($where[$pk]) ? $where[$pk] : (isset($data[$pk]) ? $data[$pk] : ''));
 | 
						|
        $vo = $data;
 | 
						|
        if ($this->request->isPost()) { // Save Options
 | 
						|
            $vo = array_merge(input('post.'), $data);
 | 
						|
            $this->_callback('_form_filter', $vo);
 | 
						|
            $result = Data::save($db, $vo, $pk, $where);
 | 
						|
            if (false !== $this->_callback('_form_result', $result)) {
 | 
						|
                $result !== false ? $this->success('恭喜,保存成功哦!', ($pk_value === '' ? null : '')) : $this->error('保存失败,请稍候再试!');
 | 
						|
            }
 | 
						|
            return $result;
 | 
						|
        }
 | 
						|
        if ($pk_value !== '') { // Edit Options
 | 
						|
            !empty($pk_value) && $db->where($pk, $pk_value);
 | 
						|
            !empty($where) && $db->where($where);
 | 
						|
            $vo = array_merge($data, (array)$db->find());
 | 
						|
        }
 | 
						|
        $this->_callback('_form_filter', $vo);
 | 
						|
        $this->assign('vo', $vo);
 | 
						|
        empty($this->title) or $this->assign('title', $this->title);
 | 
						|
        return is_null($tpl) ? $vo : $this->display($tpl);
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    /**
 | 
						|
     * 当前对象回调成员方法
 | 
						|
     * @param string $method
 | 
						|
     * @param array $data
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    protected function _callback($method, &$data) {
 | 
						|
        foreach (array($method, "_" . $this->request->action() . "{$method}") as $method) {
 | 
						|
            if (method_exists($this, $method) && false === $this->$method($data)) {
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
} |