/// <summary>
        /// Evaluates a set of claims using the authorization operation.
        /// </summary>
        /// <param name="claimSet">The set of claims to be evaluated.</param>
        /// <returns>True if the set of claims evaluates to true; otherwise false.</returns>
        public override bool Evaluate(IEnumerable <Claim> claims)
        {
            if (claims == null)
            {
                throw new ArgumentNullException("claims");
            }

            IList <Claim> list = null;

            Capl.Authorization.Operations.Operation operation = null;
            MatchExpression exp = Capl.Authorization.Matching.MatchExpression.Create(this.MatchExpression.Type, null);

            list = exp.MatchClaims(claims, this.MatchExpression.ClaimType, this.MatchExpression.Value);

            if (list.Count == 0)
            {
                return(!this.MatchExpression.Required);
            }

            if (this.Issuer != null)
            {
                int count = list.Count;
                for (int index = 0; index < count; index++)
                {
                    if (list[index].Issuer != this.Issuer)
                    {
                        list.Remove(list[index]);
                        index--;
                        count--;
                    }
                }
            }

            operation = Capl.Authorization.Operations.Operation.Create(this.Operation.Type, null);

            foreach (Claim claim in list)
            {
                bool eval = operation.Execute(claim.Value, this.Operation.ClaimValue);

                if (this.Evaluates && eval)
                {
                    return(true);
                }

                if (!this.Evaluates && eval)
                {
                    return(false);
                }
            }

            return(!this.Evaluates);
        }
Beispiel #2
0
        /// <summary>
        ///     Evaluates a set of claims using the authorization operation.
        /// </summary>
        /// <param name="claimSet">The set of claims to be evaluated.</param>
        /// <returns>True if the set of claims evaluates to true; otherwise false.</returns>
        public override bool Evaluate(IEnumerable <Claim> claims)
        {
            _ = claims ?? throw new ArgumentNullException(nameof(claims));

            MatchExpression exp = Matching.MatchExpression.Create(MatchExpression.Type, null);

            IList <Claim> list = exp.MatchClaims(claims, MatchExpression.ClaimType, MatchExpression.Value);

            if (list.Count == 0)
            {
                return(!MatchExpression.Required);
            }

            if (Issuer != null)
            {
                int count = list.Count;
                for (int index = 0; index < count; index++)
                {
                    if (list[index].Issuer != Issuer)
                    {
                        list.Remove(list[index]);
                        index--;
                        count--;
                    }
                }
            }

            Operation operation = Operations.Operation.Create(Operation.Type, null);

            foreach (Claim claim in list)
            {
                bool eval = operation.Execute(claim.Value, Operation.ClaimValue);

                if (Evaluates && eval)
                {
                    return(true);
                }

                if (!Evaluates && eval)
                {
                    return(false);
                }
            }

            return(!Evaluates);
        }
Beispiel #3
0
        /// <summary>
        /// Executes the transform.
        /// </summary>
        /// <param name="claimSet">Input set of claims to transform.</param>
        /// <returns>Transformed set of claims.</returns>
        public override IEnumerable <Claim> TransformClaims(IEnumerable <Claim> claims)
        {
            if (claims == null)
            {
                throw new ArgumentNullException("claims");
            }

            TransformAction     action            = null;
            IList <Claim>       matchedClaims     = null;
            IEnumerable <Claim> transformedClaims = null;
            bool eval = false;

            action = TransformAction.Create(this.Type, null);

            if (this.MatchExpression != null)
            {
                MatchExpression matcher = MatchExpressionDictionary.Default[this.MatchExpression.Type.ToString()]; //CaplConfigurationManager.MatchExpressions[this.MatchExpression.Type.ToString()];
                matchedClaims = matcher.MatchClaims(claims, this.MatchExpression.ClaimType, this.MatchExpression.Value);
            }

            if (this.Expression == null)
            {
                eval = true;
            }
            else
            {
                eval = this.Expression.Evaluate(claims);
            }

            if (eval)
            {
                transformedClaims = action.Execute(claims, matchedClaims, this.TargetClaim);
            }

            if (transformedClaims != null)
            {
                return(transformedClaims);
            }
            else
            {
                return(claims);
            }
        }