Example #1
0
        /// <summary>
        /// Prepara as claims com base nas permissões retornadas pelo usuário
        /// </summary>
        /// <param name="context">Contexto da execução</param>
        /// <param name="authenticationResult">Resultado da autenticação com os dados do usuário</param>
        /// <param name="idClinica">Clinica selecionada no momento do login</param>
        /// <returns>Identity criado</returns>
        private ClaimsIdentity PrepareClaims(OAuthGrantResourceOwnerCredentialsContext context, AuthenticationResult authenticationResult, int idClinica)
        {
            // Busca os dados da última clínica autenticada. Caso seja o primeiro acesso, a clínica será a primeira retornada da lista de clínicas vinculadas.
            var repClinica = new ClinicaRepository();
            var clinica    = repClinica.GetByKey(idClinica);

            // Recupera os dados do grupo do usuário para a clínica logada.
            var usuarioGrupoRep = new UsuarioGrupoRepository();
            var grupo           = usuarioGrupoRep.GetByUsuarioClinica(authenticationResult.IdUsuario, idClinica);

            // Faz o parse da lista de permissões do banco para uma estrutura fácil de ser serializada e salva no identity.
            var listPermissaoAplicacao = JsonConvert.SerializeObject(ParsePermissaoAplicacao(grupo.Permissoes));

            // Cria o identity.
            var identity = new ClaimsIdentity(context.Options.AuthenticationType);

            identity.AddClaim(new Claim(ClaimTypes.Name, authenticationResult.Nome));
            identity.AddClaim(new Claim(ClaimTypes.Sid, authenticationResult.IdUsuario.ToString()));
            identity.AddClaim(new Claim("Clinica", clinica.IdClinica.ToString()));
            identity.AddClaim(new Claim("IdUsuarioGrupo", authenticationResult.IdUsuarioGrupo.ToString()));
            identity.AddClaim(new Claim("Permissions", listPermissaoAplicacao));

            foreach (var item in grupo.Permissoes)
            {
                var permissoes = item.Permissoes.Split('.').ToList();
                foreach (var permissao in permissoes)
                {
                    identity.AddClaim(new Claim(ClaimTypes.Role, item.IdAplicacao + "." + permissao));
                }
            }

            return(identity);
        }
Example #2
0
 public IHttpActionResult GetByKey([FromUri] int key)
 {
     using (var repository = new ClinicaRepository())
     {
         try
         {
             return(Ok(CreateResponse(true, "Clínica retornada com sucesso", repository.GetByKey(key))));
         }
         catch (System.Exception ex)
         {
             return(Content(HttpStatusCode.BadRequest, CreateResponse(false, "Erro ao retornar os dados da clínica", ex.Message)));
         }
     }
 }