✏️ 正在编辑: Gatekeeper.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/application/Modules/Gatekeeper/Service/Gatekeeper.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php namespace Modules\Gatekeeper\Service; class Gatekeeper extends \Zend_Acl { public const PLANOS = [ 'light', 'lightcall' ]; private const ACESSO_TOTAL = [ 0 => 'Usuário', 1 => 'Corretor', 2 => 'Gerente', 3 => 'Supervisor', 4 => 'Afiliado' ]; private const ACESSO_LIGHT = [ 0 => 'Usuário', ]; private const ACESSO_LIGHTCALL = [ 0 => 'Usuário', ]; private const QTD_USUARIOS_PLANO = [ 'light' => 5, 'lightcall' => 5, ]; private const QTD_CORRETORES_PLANO = [ 'light' => 15, 'lightcall' => 15, ]; private const QTD_LAYOUT = [ 'light' => 3, 'lightcall' => 3, ]; private const ACESSO_PERMISSOES_LIGHT = [ 'index' => [ 'pos-venda', 'atualizacao-sistema', 'suporte-yuppie', 'grupo-usuario', 'usuario', 'grupo-comissao', 'comissionamento', 'comissionamento-corretor', 'comissionamento-grupo', 'empresa', 'parceiro', 'banco', 'convenio', 'tabela', 'produto', 'gerente', 'gerente-rota', 'rota', 'corretor', 'status-proposta', 'cliente', 'midia-origem', 'termo-responsabilidade', 'emprestimo-pessoal', 'acompanhar-portabilidade', 'relatorio-sintetico-agrupado', 'contrato', 'proposta', 'relatorio', 'consulta' ], 'simulador' => [ 'corretor' ], 'permissoes' => [ 'grupo-usuario', ], 'atualizar-comissoes' => [ 'comissionamento-corretor' ], 'fatores' => [ 'tabela' ], 'gerar-comissoes' => [ 'comissionamento' ], 'recalculo-comissao' => [ 'comissionamento-corretor' ], 'email-configuracao' => [ 'chamado' ], 'pre-cadastro' => [ 'proposta' ], 'listar-para-digitacao' => [ 'callcenter' ], 'efetivacao' => [ 'proposta' ], 'contratos-verificar' => [ 'contrato' ], 'listar-token-yuppies' => [ 'sincronizacao' ], 'importar-gcom' => [ 'sincronizacao' ], 'importar-direto' => [ 'sincronizacao' ], 'dados-sincronizacao' => [ 'sincronizacao' ], 'importar-producao-banco' => [ 'contrato' ], 'acompanhar-portabilidade' => [ 'contrato' ], 'receber-fisico' => [ 'contrato' ], 'enviar-fisico' => [ 'contrato' ], 'importar-envio-fisico' => [ 'contrato' ], 'analise-fisico' => [ 'contrato' ], 'producao-formalizacao' => [ 'relatorio' ], 'fisicos-pendentes' => [ 'relatorio' ], 'fisicos-recepcionados' => [ 'relatorio' ], 'ranking-fisicos-pendentes' => [ 'relatorio' ], 'ranking-envios-pendentes' => [ 'relatorio' ], 'pagar-comissao' => [ 'financeiro' ], 'excluir-protocolo-pagamento' => [ 'contrato' ], 'protocolos-liberar' => [ 'contrato' ], 'quitar-protocolos' => [ 'financeiro' ], 'protocolos-quitados' => [ 'financeiro' ], 'protocolos-gerados' => [ 'financeiro' ], 'pagar-comissao-supervisor' => [ 'financeiro' ], 'excluir-protocolo-pagamento-supervisor' => [ 'contrato' ], 'pagamento-supervisores' => [ 'relatorio' ], 'pagar-comissao-gerente' => [ 'financeiro' ], 'recebimento-comissao-empresa' => [ 'financeiro' ], 'baixa-recebimento-comissao-empresa' => [ 'financeiro' ], 'excluir-protocolo-pagamento-gerente' => [ 'contrato' ], 'pagamento-gerentes' => [ 'relatorio' ], 'producao-analitico' => [ 'relatorio' ], 'producao-sintetico' => [ 'relatorio' ], 'producao-analitico-tipo' => [ 'relatorio' ], 'producao-convenio' => [ 'relatorio' ], 'producao-banco' => [ 'relatorio' ], 'producao-tipo-produto' => [ 'relatorio' ], 'recebimento-generico' => [ 'relatorio' ], 'pos-venda' => [ 'relatorio' ], 'por-beneficio' => [ 'consulta' ], 'por-cpf' => [ 'consulta' ], 'telefones' => [ 'consulta' ], 'siape' => [ 'consulta' ], 'situacao-beneficio' => [ 'consulta' ], 'carta-concessao' => [ 'consulta' ], 'download-detalhamento-inss' => [ 'consulta' ], 'download-extrato-credito-inss' => [ 'consulta' ], 'consulta-fgts-pan' => [ 'consulta' ], 'inclusao-fgts-pan' => [ 'consulta' ], ]; private const ACESSO_PERMISSOES_LIGHTCALL = [ 'index' => [ 'callcenter', 'callcenter-orgao', 'callcenter-secretaria', 'callcenter-status-atendimento', 'callcenter-campanha', 'callcenter-base', 'callcenter-modelo-atendimento', 'callcenter-blacklist', 'callcenter-motivos-pausa', 'callcenter-pausas-programadas', 'folha-ponto', 'financeiro', 'funcionario' ], 'lista-operadores' => [ 'callcenter' ], 'config' => [ 'callcenter' ], 'alocar-operadores' => [ 'callcenter-campanha' ], 'resetar-varios' => [ 'callcenter-base' ], 'transferir-clientes' => [ 'callcenter-base' ], 'receptivos-agendados' => [ 'callcenter' ], 'simulacoes-abertas' => [ 'callcenter' ], 'clientes' => [ 'callcenter' ], 'meus-contratos' => [ 'corretor' ], 'meus-protocolos' => [ 'corretor' ], 'base' => [ 'callcenter-relatorios' ], 'painel' => [ 'callcenter-relatorios' ], 'atendimentos' => [ 'callcenter-relatorios' ], 'producao-gerente' => [ 'relatorio' ], 'perfil-leads' => [ 'callcenter-relatorios' ], 'pausas-operadores' => [ 'callcenter-relatorios' ], 'envios-mensagem-analitico' => [ 'callcenter-ferramentas' ], 'mensagem' => [ 'callcenter-ferramentas' ], 'etiquetas' => [ 'callcenter-ferramentas' ] ]; /** * @return mixed|null * @throws \Zend_Config_Exception */ public static function getPlanoConfig() { if (!empty(service('config')->get()->yuppie->plano)) { return service('config')->get()->yuppie->plano; } return null; } /** * @return string[] * @throws \Zend_Config_Exception */ public static function tipoAcesso() { $plano = self::getPlanoConfig(); switch ($plano) { case 'light': return self::ACESSO_LIGHT; case 'lightcall': return self::ACESSO_LIGHTCALL; default: return self::ACESSO_TOTAL; } } /** * @return array|false * @throws \Zend_Config_Exception */ public static function navPermissoes() { $plano = self::getPlanoConfig(); $menuIcones = new \Zend_Config_Xml(APPLICATION_PATH . "/configs/navigation-second.xml", 'nav'); $menuConfig = new \Zend_Config_Xml(APPLICATION_PATH . "/configs/navigation-config.xml", 'nav'); $menuPrincipal = new \Zend_Config_Xml(APPLICATION_PATH . "/configs/navigation.xml", 'nav'); $menuCall = new \Zend_Config_Xml(APPLICATION_PATH . "/configs/navigation-callcenter.xml", 'nav'); $remover = []; $acessos = []; if (empty($plano)) { return false; } switch ($plano) { case 'light': $acessos = self::ACESSO_PERMISSOES_LIGHT; break; case 'lightcall': $acessos = array_merge_recursive(self::ACESSO_PERMISSOES_LIGHT, self::ACESSO_PERMISSOES_LIGHTCALL); break; } self::processarPermissoes($menuIcones->toArray(), $acessos, $remover); self::processarPermissoes($menuConfig->toArray(), $acessos, $remover); self::processarPermissoes($menuPrincipal->toArray(), $acessos, $remover); self::processarPermissoes($menuCall->toArray(), $acessos, $remover); return $remover; } /** * @param string|null $where * @return string * @throws \Zend_Config_Exception */ public static function grupoUsuarios(string $where = null): ?string { $plano = self::getPlanoConfig(); if ($plano == 'light') { $where = $where . " AND nome NOT LIKE '%Callcenter%'"; } return $where; } /** * @throws \Zend_Config_Exception * @throws \Zend_Exception */ public static function limiteUsuarios() { $plano = self::getPlanoConfig(); $table = new \Model_DbTable_Usuario(); $usuarios = $table->fetchAll("u.login <> 'yuppie'"); if (!empty($plano) && self::QTD_USUARIOS_PLANO[$plano] <= count($usuarios)) { throw new \Zend_Exception("Usuário não pode ser cadastrado, limite de cadastros foi atingido."); } } /** * @throws \Zend_Config_Exception */ public static function limiteCorretores() { $plano = self::getPlanoConfig(); $model = new \Model_DbTable_Corretor(); $corretores = $model->fetchColumns(['id']); if (!empty($plano) && self::QTD_CORRETORES_PLANO[$plano] <= count($corretores)) { throw new \Exception("Corretor não pode ser cadastrado, o limite de cadastros foi atingido."); } } /** * @param string $tipoLayout * @throws \Zend_Config_Exception */ public static function limiteLayoutProprio(string $tipoLayout) { $plano = self::getPlanoConfig(); $model = new \Model_DbTable_Layouts(); $layouts = $model->fetchAll(['tipo_layout = ?' => $tipoLayout ?? 0]); $qtdLimite = self::QTD_LAYOUT[$plano]; if ($tipoLayout) { $qtdLimite = self::QTD_LAYOUT[$plano]; } if (!empty($plano) && $qtdLimite <= count($layouts)) { throw new \Exception("Layout não pode ser cadastrado, o limite foi atingido."); } } /** * @param array $nav * @param array $acessos * @param $remover */ public static function processarPermissoes(array $nav, array $acessos, &$remover) { foreach ($nav as $menu) { if (!empty($menu['pages'])) { self::processarPermissoes($menu['pages'], $acessos, $remover); } if (empty($menu['privilege']) || empty($menu['resource'])) { continue; } if (!is_array($acessos[$menu['privilege']])) { $remover[$menu['privilege']][] = $menu['resource']; continue; } if (!in_array($menu['resource'], $acessos[$menu['privilege']])) { $remover[$menu['privilege']][] = $menu['resource']; } } } }
💾 保存文件
← 返回文件管理器