Help.class.php 4.78 KB
<?php
/**
 * Created by PhpStorm.
 * User: zhonglei
 * Date: 2017/6/21
 * Time: 17:14
 */

namespace Common\Common;

use Com\Cache as ComCache;
use Common\Service\ConfigService;
use Common\Service\SettingService;

class Help
{
    /**
     * 实例化
     * @return Help
     */
    public static function &instance()
    {
        static $instance;

        if (empty($instance)) {
            $instance = new self();
        }

        return $instance;
    }

    /**
     * 获取用户所在部门以及父级部门的ID集合
     *
     * @param array $user
     *
     * @return array
     */
    public function get_user_dp_list($user = [])
    {
        $dpIds = [];
        // 部门ID
        if (isset($user['dpName']) && !empty($user['dpName'])) {

            $myDpIds = array_column($user['dpName'], 'dpId');

            $dpServ = &Department::instance();
            $parentDpIds = [];

            // 取父级部门ID
            foreach ($myDpIds as $myDpId) {
                $dpServ->list_parent_cdids($myDpId, $parentDpIds);
            }

            $dpIds = array_unique(array_merge($myDpIds, array_values($parentDpIds)));
        }

        return $dpIds;
    }

    /**
     * 获取是否用户发起话题权限
     * @param array $user 用户详情
     * @return array 后台设置权限以及当前用户是否有权限发布话题
     */
    public function setting_auth($user = [])
    {

        $setting = Config::instance()->getCacheData();

        $setting['push_topic_auth'] = Constant::PUSH_TOPIC_AUTH_FALSE;

        // 我所在部门和所有父级部门
        $dp_ids = $this->get_user_dp_list($user);

        // 如果不是全公司
        if ($setting['right']['is_all'] != Constant::SETTING_ALL_AUTH) {

            // 如果设置了人员
            if (!empty($setting['right']['user_list'])) {

                // 获取权限中的人员集合
                $setting_auth_uids = array_column($setting['right']['user_list'], 'uid');

                // 如果存在交集
                if (in_array($user['memUid'], $setting_auth_uids)) {
                    $setting['push_topic_auth'] = Constant::PUSH_TOPIC_AUTH_TRUE;
                    return $setting;
                }
            }


            // 如果设置了部门
            if (!empty($setting['right']['dp_list'])) {

                // 获取权限中的部门集合
                $setting_auth_dp_ids = array_column($setting['right']['dp_list'], 'dp_id');

                // 如果存在交集
                if (array_intersect($dp_ids, $setting_auth_dp_ids)) {
                    $setting['push_topic_auth'] = Constant::PUSH_TOPIC_AUTH_TRUE;
                }
            }

            // 如果设置了岗位
            if (!empty($setting['right']['job_list '])) {

                // 获取权限中的岗位集合
                $setting_auth_job_ids = array_column($setting['right']['job_list '], 'job_id');

                // 如果包含则有权限
                if (in_array($user['job']['jobId'], $setting_auth_job_ids)) {
                    $setting['push_topic_auth'] = Constant::PUSH_TOPIC_AUTH_TRUE;
                }
            }

            // 如果设置了角色
            if (!empty($setting['right']['role_list '])) {

                // 获取权限中的岗位集合
                $setting_auth_role_ids = array_column($setting['right']['role_list '], 'role_id');

                // 如果包含则有权限
                if (in_array($user['role']['roleId'], $setting_auth_role_ids)) {
                    $setting['push_topic_auth'] = Constant::PUSH_TOPIC_AUTH_TRUE;
                }
            }

            // 如果设置了标签
            if (!empty($setting['right']['tag_list'])) {
                $setting_auth_tag_ids = array_column($setting['right']['tag_list'], 'tag_id');

                // 调用SDK获取用户列表
                $memList = Tag::instance()->listUserByTagId($setting_auth_tag_ids);
                // 获取用户UIDS
                $ucMemUids = array_filter(array_column($memList['list'], 'memUid'));
                if (in_array($user['memUid'], $ucMemUids)) {
                    $setting['push_topic_auth'] = Constant::PUSH_TOPIC_AUTH_TRUE;
                    return $setting;
                }

                // 获取部门IDS
                $ucDpIds = array_filter(array_column($memList['list'], 'dpId'));

                // 如果存在交集
                if (array_intersect($dp_ids, $ucDpIds)) {
                    $setting['push_topic_auth'] = Constant::PUSH_TOPIC_AUTH_TRUE;
                    return $setting;
                }
            }
        } else {
            // 如果是全公司则有权限
            $setting['push_topic_auth'] = Constant::PUSH_TOPIC_AUTH_TRUE;
        }

        // 我的标签
        return $setting;
    }


}