AuthorityController.class.php 2.24 KB
<?php
/**
 * 判断是否有管理权限
 */

namespace Rpc\Controller\Competence;

use Common\Common\Cache;
use Common\Common\Department;
use Common\Service\InviteSettingService;
use VcySDK\EnterprisePlugin;
use VcySDK\Service;

class AuthorityController extends AbstractController
{
    /**
     * @param $user (API)$this->_login->user
     * @return array|bool
     */
    public function Index()
    {
        $user = $this->get_arguments();
        if (empty($user)) {
            return [false, false];
        }

        $powers = array($user['memUid']);
        if (!empty($user['job'])) {
            $powers[] = $user['job']['jobId'];
        }
        if (!empty($user['role'])) {
            $powers[] = $user['role']['roleId'];
        }
        if (!empty($user['dpName'])) {
            $department = Department::instance();
            foreach ($user['dpName'] as $item) {
                $parentDpIds[$item['dpId']] = $item['dpId'];
                $department->list_parent_cdids($item['dpId'], $parentDpIds);
                $powers = array_merge($powers, array_values($parentDpIds));
            }
        }

        $settingServ = new InviteSettingService();
        $data = $settingServ->get_by_conds([]);
        $settings = Cache::instance()->get('Common.AppSetting');
        $result = [
            // 管理人员权限
            false,
            // 邀请人员权限
            false
        ];
        // 管理人员 权限
        if (array_intersect($powers, $settings['manageAuths']['value']['auths'])) {
            $result[0] = true;
        }
        // 邀请人员 权限
        if (array_intersect($powers, unserialize($data['invite_udpids'])['auths'])) {
            $result[1] = true;
        }

        // 通讯录是否安装 也会决定 管理人员和邀请人员的权限
        $enterprisePluginSdk = new EnterprisePlugin(Service::instance());
        $pluginList = $enterprisePluginSdk->listAll();
        $pluginList = array_combine_by_key($pluginList, 'plIdentifier');
        $contactInstalled = $pluginList['contact']['available'] == EnterprisePlugin::AVAILABLE_OPEN;
        $result[1] = $result[1] && $contactInstalled;
        // 返回 通讯录是否安装
        $result[2] = $contactInstalled;

        return $result;
    }
}