AbstractController.class.php 4.73 KB
<?php
/**
 * AbstractController.class.php
 * $author$
 */

namespace Apicp\Controller\AdminManager;

use Common\Common\Cache;
use Common\Common\ShortUrl;
use Common\Common\Sms;
use VcySDK\Adminer;
use VcySDK\AdminerRole;
use VcySDK\Service;

abstract class AbstractController extends \Common\Controller\Apicp\AbstractController
{

    /**
     * @type Adminer
     */
    protected $_sdkAdminer = null;

    protected $needCheckThePayment = false;

    public function before_action($action = '')
    {

        if (!parent::before_action($action)) {
            return false;
        }

        // 调用UC接口,查询管理员详情
        $this->_sdkAdminer = new Adminer(Service::instance());

        // 调用UC接口,查询管理员角色详情
        $this->_sdkRole = new AdminerRole(Service::instance());
        return true;
    }

    /**
     * 发送 邮箱&短信 邀请
     * @return bool
     */
    protected function inviteMsgSend($eaId)
    {
        try {
            $enterpriseData = Cache::instance()->get(
                'Common.EnterpriseDetail',
                '',
                ['expire' => cfg('ENTERPRISE_DETAIL_CACHE_EXPIRE')]
            );
            $adminerSdk = new Adminer(Service::instance());
            $adminer = $adminerSdk->fetch(['eaId' => $eaId]);

            $sdk = new Adminer(Service::instance());
            $aiaToken = md5(NOW_TIME . QY_DOMAIN . $eaId . random(8));
            $mobileFrontUrl = oaUrl('Frontend/Index/InviteEmail/Index', ['aiaToken' => $aiaToken]) . '?_identifier=common';
            $eaMobile = substr($this->_login->user['eaMobile'], 0, 3) . '****' . substr($this->_login->user['eaMobile'], -4);
            $inviteEmailData = [
                'eaId' => $eaId,
                'mcTplName' => Adminer::INVITE_EMAIL_TYPE_INVITE,
                'aiaToken' => $aiaToken,
                'mcSubject' => '畅移员圈管理员邀请',
                'mcVars' => [
                    "%adminer_name%" => $adminer['eaRealname'],
                    "%qy_name%" => $enterpriseData['epName'],
                    "%user_name%" => $this->_login->user['eaRealname'],
                    "%adminer_mobile%" => $eaMobile,
                    "%qrcode%" => $enterpriseData['corpWxqrcode'],
                    "%date%" => rgmdate(NOW_TIME, 'Y-m-d'),
                    "%url%" => $mobileFrontUrl
                ],
                'smsChannel' => Sms::CHANNEL_SENDCLOUD,
                'smsMessage' => json_encode([
                    'username' => $adminer['eaRealname'],
                    'adminname' => $this->_login->user['eaRealname'],
                    'epname' => $enterpriseData['epName'],
                    'url' => ShortUrl::create($mobileFrontUrl)
                ]),
                'smsTemplateId' => Sms::SMS_TMP_ID_ADMINCP_ADMINER_INVITE
            ];

            $sdk->inviteSendInvitation($inviteEmailData);
        } catch (\Exception $e) {
            // 不做报错处理
        }

        return true;
    }

    /**
     * 校验当前管理员是否有权限设置管理级别、角色组
     * @author liyifei
     * @param Int $eaLevel
     * @param string $earId
     * @return mixed
     */
    protected function checkAdminRole($eaLevel, $earId)
    {
        $user = $this->_login->user;
        if (!isset($user['eaLevel'])) {
            return false;
        }

        switch ($user['eaLevel']) {
            // 当前管理员为超级管理
            case Adminer::ADMIN_LEVEL_SUPER:
                // 调用UC接口,查询角色组详情
                $role = $this->_sdkRole->detail(['earId' => $earId]);
                if (empty($role)) {
                    return false;
                }

                // 设置超级管理,可设置通讯录管理权限为全公司的角色组
                if ($eaLevel == Adminer::ADMIN_LEVEL_SUPER && (!empty($role['readDpIdList']) || !empty($role['writeDpIdList']))) {
                    return false;
                }

                // 设置分级管理,可设置通讯录管理权限为指定对象的角色组
                if ($eaLevel == Adminer::ADMIN_LEVEL_BRANCH && empty($role['readDpIdList']) && empty($role['writeDpIdList'])) {
                    return false;
                }
                break;

            // 当前管理员为分级管理
            case Adminer::ADMIN_LEVEL_BRANCH:
                // 设置超级管理,无权限
                if ($eaLevel == Adminer::ADMIN_LEVEL_SUPER) {
                    return false;
                }

                // 设置分级管理,可设置本身所在的角色组
                if ($eaLevel == Adminer::ADMIN_LEVEL_BRANCH && $earId != $user['earId']) {
                    return false;
                }
                break;
        }

        return true;
    }
}