예제 #1
0
        /// <summary>
        /// Obtiene la información de un usuario autenticado bajo el contexto owin actual
        /// </summary>
        /// <param name="owinContext">El contexto owin actual</param>
        /// <returns>Información de usuario autenticado</returns>
        public static IsssteUser GetAuthenticatedUser(this IOwinContext owinContext)
        {
            if (owinContext.Authentication.User.Identity.IsAuthenticated == false)
            {
                return(null);
            }

            var idClaim        = owinContext.Authentication.User.Claims.FirstOrDefault(claim => claim.Type == ClaimTypes.NameIdentifier);
            var userNameClaim  = owinContext.Authentication.User.Claims.FirstOrDefault(claim => claim.Type == ClaimTypes.Name);
            var givenNameClaim = owinContext.Authentication.User.Claims.FirstOrDefault(claim => claim.Type == ClaimTypes.GivenName);
            var emailClaim     = owinContext.Authentication.User.Claims.FirstOrDefault(claim => claim.Type == ClaimTypes.Email);

            var user = new Core.IsssteUser
            {
                Id       = idClaim == null ? string.Empty : idClaim.Value,
                UserName = userNameClaim == null ? string.Empty : userNameClaim.Value,
                Name     = givenNameClaim == null ? string.Empty : givenNameClaim.Value,
                Email    = emailClaim == null ? string.Empty : emailClaim.Value
            };

            var propertiesClaim = owinContext.Authentication.User.Claims.FirstOrDefault(claim => claim.Type == IsssteTramitesClaimTypes.Properties);

            List <IsssteUserProperty> properties = new List <IsssteUserProperty>();

            if (propertiesClaim != null)
            {
                properties = JsonConvert.DeserializeObject <List <IsssteUserProperty> >(propertiesClaim.Value);
            }

            user.Properties = properties;

            user.Roles = owinContext.GetAuthenticatedUserRoles();

            return(user);
        }
예제 #2
0
        /// <summary>
        /// Obtiene la lista de roles del usuario, que esta autenticado en el contexto de Owin, que coinciden con la lista de roles definidos en en el atributo
        /// <see cref="Common.Web.Mvc.AuthorizeByConfigAttribute"/> o <see cref="Common.Web.Http.AuthorizeByConfigAttribute"/> aplicado al método que ejecuta la
        /// llamada a este método
        /// </summary>
        /// <remarks>Si el método que realiza la llamada no tiene aplicado ninguno de los atributos de segurdad mencionados, se regresaran todos los roles del usuario</remarks>
        /// <param name="owinContext">El contexto owin actual</param>
        /// <param name="callingMemberName">Nombre del método que esta ejecutando esta llamada</param>
        /// <returns>Lista de roles del usuario autenticado que coinciden con los roles autorizados</returns>
        public static List <IsssteRole> GetAuthenticatedUserAuthorizedRoles(this IOwinContext owinContext, [CallerMemberName] string callingMemberName = "")
        {
            List <IsssteRole> result = new List <IsssteRole>();

            var allUserRoles = owinContext.GetAuthenticatedUserRoles();

            StackTrace stackTrace = new StackTrace();

            var callingTypeMethod = stackTrace.GetFrames()
                                    .Where(f => f.GetMethod().Name == callingMemberName)
                                    .Select(f => f.GetMethod())
                                    .LastOrDefault();

            if (callingTypeMethod != null)
            {
                var authorizeAttribute = (IAuthorizeByConfig)callingTypeMethod.GetCustomAttributes(typeof(Common.Web.Mvc.AuthorizeByConfigAttribute), false).FirstOrDefault();

                if (authorizeAttribute == null)
                {
                    authorizeAttribute = (IAuthorizeByConfig)callingTypeMethod.GetCustomAttributes(typeof(Common.Web.Http.AuthorizeByConfigAttribute), false).FirstOrDefault();
                }

                if (authorizeAttribute != null)
                {
                    var authorizationRoles = authorizeAttribute.GetRoles();

                    result = allUserRoles
                             .Where(r => authorizationRoles.Contains(r.Name))
                             .ToList();
                }
            }
            else
            {
                result = allUserRoles;
            }

            return(result);
        }