====== Especificação Funcional: Permissionamento ====== ===== Resumo ===== O sistema irá contará com um serviço de permissionamento que irá definir para cada usuário o que o mesmo pode ver ou fazer. ====== Descrição ====== Cada sistema irá definir como irá funcionar o permissionamento, no pré-matrícula web, as permissões são fixas, ou seja, cada perfil de usuário possui suas permissões de acesso, caso seja necessário incluir ou remover permissões será necessário incluir manualmente. ===== Como funciona? ===== Basicamente, cada ação do sistema possuíra uma anotação que irá verificar se o usuário logado possui ou não permissão para executa-la, caso não possua, uma tela de acesso negado é exibida. As permissões foram estruturadas da seguinte forma: Foi usado o Policy Server. Link da documentação [[https://policyserver.io/|aqui]]. * Roles: São os perfis. Aqui é definido todos os perfis que o sistema possuirá. Até o momento são eles: **tecsystem, administrador, gestor e responsável**. * Permissions: São as permissões. Aqui é definido todas as ações que irão ser validadas. * Policy: Possui as roles e as permissions. * RolesPermissions: É o relacionamento das roles com as permissions. É o que cada perfil poderá ver/executar. ===== Permissões nos serviços ===== Para o usuário acessar determinada funcionalidade o sistema precisa verificar se este usuário possui a permissão necessária. Para isso funcionar, cada serviço do sistema possui as suas permissões, desta forma, sempre que um usuário solicitar o acesso a uma funcionalidade, o serviço irá verificar se o perfil do usuário possui a permissão , caso possua, o usuário poderá acessar a funcionalidade. Para verificar se o usuário possui ou não a permissão necessária, o cliente (no caso, o prematricula.mvc) envia um token (que contem a perfil do usuário) para o serviço. O serviço recebe este token e o valida. Abaixo é exibida uma relação das permissões disponíveis para cada perfil agrupadas por serviço: **Obs.:** Quando está escrito **"todos"** está incluído os perfis responsavel, gestor e administrador, com exceção da tecsystem. ==== PREMATRICULA-API ==== |**Permissão**|**Perfil do usuário**| |dependente|todos| |dependente_create|responsavel| |dependente_update|responsavel| |dependente_delete|responsavel| |prematricula|todos| |prematricula_ordenar|gestor, administrador| |prematricula_alterarsituacao|gestor, administrador| |prematricula_create|responsavel| |prematricula_delete_id|responsavel| |prepararturma|gestor, administrador| |prepararturma_create|gestor, administrador| |prepararturma_removerturma|gestor, administrador| |prepararturma_gerarxml|gestor, administrador| |responsavel|todos| |responsavel_create|responsavel| |responsavel_update|responsavel| |responsavel_delete|responsavel| ==== PREMATRICULA-CRUD ==== |**Permissão**|**Perfil do usuário**| |cliente|tecsystem| |cliente_create|tecsystem| |cliente_update|tecsystem| |cliente_delete|tecsystem| |configuracao|todos| |configuracao_create|gestor, administrador, tecsystem| |configuracao_delete|gestor, administrador, tecsystem| |curso|todos| |escola|todos| |modalidade|todos| |periodo|todos| |periodo_create|gestor, administrador| |periodo_update|gestor, administrador| |periodo_delete|gestor, administrador| |prematriculacursocriterio|gestor, administrador| |prematriculacursocriterio_create|gestor, administrador| |serie|todos| |vagas|todos| |vagas_create|gestor, administrador| |vagas_update|gestor, administrador| |vagas_delete|gestor, administrador| ==== SCHOOL-CRUD ==== |**Permissão**|**Perfil do usuário**| |aluno|todos| |curso|todos| |curso_create|gestor, administrador| |curso_update|gestor, administrador| |curso_delete|gestor, administrador| |escola|todos| |escola_create|gestor, administrador| |escola_update|gestor, administrador| |escola_delete|gestor, administrador| |etapa|todos| |modalidade|todos| |municipio|todos| |serie|todos| |serie_create|gestor, administrador| |serie_update|gestor, administrador| |serie_delete|gestor, administrador| |serieetapa|todos| |turma|todos| |turma_create|gestor, administrador| |turma_update|gestor, administrador| |turma_delete|gestor, administrador| ==== PREMATRICULA-WEB ==== Este é o cliente, contem a parte visual do sistema de pré-matrícula. |**Relação Perfil x Permissões**|| |__Permissão__|__Perfil__| |home|todos| |create_cliente|tecsystem| |update_cliente|tecsystem| |delete_cliente|tecsystem| |view_cliente|tecsystem| |list_cliente|tecsystem| |list_usuarioperfil|administrador, tecsystem| |update_usuarioperfil|administrador, tecsystem| |recuperarusuario_usuarioperfil|administrador, tecsystem| |create_dependente|responsavel| |view_dependente|responsavel, gestor, administrador| |update_dependente|responsavel| |list_dependente|responsavel| |create_prematricula|responsavel| |list_prematricula|responsavel, gestor, administrador| |view_prematricula|responsavel, gestor, administrador| |buscar_dependente|responsavel| |delete_dependente|responsavel| |create_rematricula|responsavel| |list_rematricula|responsavel, gestor, administrador| |view_rematricula|responsavel, gestor, administrador| |ordenar_prematricula|gestor, administrador| |preparar_turma|gestor, administrador| |log|todos| ===== Autorização para modificar/excluir um dado ===== Foi criado um serviço para impedir que usuários de mesmo perfil tentem alterar ou excluir informações de outros usuários com o mesmo perfil. A validação consiste em verificar o GUID do usuário e compara-lo com o GUID do dado, se o GUID for o mesmo a operação poderá seguir, caso não, será lançado uma exceção para impedir que a operação de seja realizada. Existe algumas diferenças nas validações de acordo com o perfil do usuário: **Perfil responsável e administrador** É verificado o GUID do usuário e comparado com o dado, se for o mesmo a operação pode continuar. **Perfil gestor** É usado a role idaministrador(que é o GUID do administrador) do usuário para comparar com o GUID do dado e aprovar ou não a operação. Obs.: Caso o dado possua o GUID do gestor, é necessário verificar quem é o administrador desse gestor e recuperar o GUID do administrador, isso para sempre termos como parâmetro um GUID comum para esses dois tipos de usuário (administrador/gestor). ==== FLUXO ==== {{:softwares:schoolweb:requisitos:prematricula:permissionamento:fluxo.jpg|}}