<?php

namespace think\addons;

use app\common\model\AdminAuthGroup;
use app\common\model\AdminMember;
use think\facade\Session;
use think\facade\Cookie;

/**
 * 插件权限验证基类控制器
 * Class Controller
 * @package think\addons
 */
class AdminAuth extends Controller
{
    /**
     * @var 当前登录管理员
     */
    protected $member;

    /**
     * 忽略登录验证的action列表
     * @var array
     */
    protected $ignoreLogin=[];
    /**
     * 忽略权限验证的action列表
     * @var array
     */
    protected $ignoreAuth=[];
    /**
     * 架构函数
     * @access public
     */
    public function initialize()
    {
        Session::prefix('zz_admin_');
        Cookie::prefix('zz_admin_');
        //当前action在忽略登录验证列表中，无须验证直接返回
        if(in_array($this->request->action(),$this->ignoreLogin)){
            return;
        }
        //是否已登录
        $uid=$this->isLogin();
        //获取登录管理员信息
        $adminMemberModel=new AdminMember();
        $member=$adminMemberModel::with('adminAuthGroup')->get($uid);
        //数据库中不存在管理员记录
        if(!$member){
            $this->logout();
            $this->error('错误：请重新登录！','Admin/login');
        }
        //当前action在忽略权限验证列表中，无须验证直接返回
        if(in_array($this->request->action(),$this->ignoreAuth)){
            parent::initialize();
            return;
        }
        //非超级管理员，验证登录用户
        if($member->id!=1){
            if ((int)$member->getData('status') !=1) {
                $this->logout();
                $this->error('错误：当前登录用户已被禁用，请联系系统管理员！', 'Admin/login');
            }
            if ((int)$member->group_id == 0) {
                $this->logout();
                $this->error('错误：当前登录用户未被分配到任何权限组！', 'Admin/login');
            }
            $action = $this->request->param('action');
            $controller = $this->request->param('controller');
            $addon = $this->request->param('addon');
            $currentPath = "addons/{$addon}-{$controller}-{$action}";
            $re=$member->checkAuth($currentPath);
            if(!$re){
                $this->error($member->getError(), null,'stop');
            }
        }
        $this->member=$member;
        parent::initialize();
    }
    /**
     * 判断是否已登录
     * @return mixed 管理员id
     */
    public function isLogin(){
        $uid= session('UID');
        if(!$uid){
            $this->error('请登录！','Admin/login');
        }
        return $uid;
    }
    /**
     * 退出登录
     */
    public function logout(){
        session('UID',null);
    }
}
