public virtual string SubTransform(ICasbinAuthorizationContext context, ICasbinAuthorizationData data)
        {
            Claim?claim;

            if (Issuer is null)
            {
                claim = context.User.FindFirst(PreferSubClaimType);
                return(claim is null ? string.Empty : claim.Value);
            }

            claim = context.User.FindAll(PreferSubClaimType).FirstOrDefault(
                c => string.Equals(c.Issuer, Issuer));
            return(claim is null ? string.Empty : claim.Value);
        }
예제 #2
0
        public override ValueTask <IEnumerable <object> > TransformAsync(ICasbinAuthorizationContext context, ICasbinAuthorizationData data)
        {
            object[] requestValues = new object[3];
            requestValues[0] = SubTransform(context, data);

            requestValues[1] = ObjTransform(context, data, (c, _) =>
                                            c.HttpContext.Request.Path);
            requestValues[2] = ActTransform(context, data, (c, _) =>
                                            c.HttpContext.Request.Method);
            return(new ValueTask <IEnumerable <object> >(requestValues));
        }
예제 #3
0
 public ICasbinAuthorizationContext CreateContext(
     ClaimsPrincipal user, ICasbinAuthorizationData data)
 => new CasbinAuthorizationContext(user, data);
예제 #4
0
 protected virtual string ActTransform(ICasbinAuthorizationContext context, ICasbinAuthorizationData data, Func <ICasbinAuthorizationContext, ICasbinAuthorizationData, string> valueSelector)
 => valueSelector(context, data);
예제 #5
0
        public override ValueTask <IEnumerable <object> > TransformAsync(ICasbinAuthorizationContext context, ICasbinAuthorizationData data)
        {
            object[] requestValues = new object[data.ValueCount + 1];
            requestValues[0] = SubTransform(context, data);

            requestValues[1] = ObjTransform(context, data,
                                            (_, d) => d.Value1);
            requestValues[2] = ActTransform(context, data,
                                            (_, d) => d.Value2);
            return(new ValueTask <IEnumerable <object> >(requestValues));
        }
예제 #6
0
 protected virtual string DomTransform(ICasbinAuthorizationContext context, ICasbinAuthorizationData data, Func <ICasbinAuthorizationContext, ICasbinAuthorizationData, string> valueSelector)
 {
     return(valueSelector(context, data));
 }
예제 #7
0
        public override ValueTask <IEnumerable <object> > TransformAsync(ICasbinAuthorizationContext context, ICasbinAuthorizationData data)
        {
            object[] requestValues = new object[data.ValueCount + 1];
            requestValues[0] = SubTransform(context, data);

            switch (requestValues.Length)
            {
            case 3:
                requestValues[1] = ObjTransform(context, data,
                                                (_, d) => d.Value1);
                requestValues[2] = ActTransform(context, data,
                                                (_, d) => d.Value2);
                break;

            case 4:
                requestValues[1] = DomTransform(context, data,
                                                (_, d) => d.Value1);
                requestValues[2] = ObjTransform(context, data,
                                                (_, d) => d.Value2);
                requestValues[3] = ActTransform(context, data,
                                                (_, d) => d.Value3);
                break;
            }

            return(new ValueTask <IEnumerable <object> >(requestValues));
        }
 public virtual string ActTransform(ICasbinAuthorizationContext context, ICasbinAuthorizationData data)
 => data.Value2 ?? string.Empty;
        public virtual ValueTask <IEnumerable <object> > TransformAsync(ICasbinAuthorizationContext context, ICasbinAuthorizationData data)
        {
            var requestValues = new object[3];

            requestValues[0] = SubTransform(context, data);
            requestValues[1] = ObjTransform(context, data);
            requestValues[2] = ActTransform(context, data);
            return(new ValueTask <IEnumerable <object> >(requestValues));
        }
 public ICasbinAuthorizationContext CreateContext(
     ICasbinAuthorizationData data, HttpContext httpContext)
 => new CasbinAuthorizationContext(data, httpContext);
 public CasbinAuthorizationContext(ClaimsPrincipal user, ICasbinAuthorizationData data)
     : this(user, new[] { data })
 {
 }
 public CasbinAuthorizationContext(ICasbinAuthorizationData data, HttpContext httpContext)
     : this(new[] { data }, httpContext)
 {
 }
예제 #13
0
        public virtual ValueTask <IEnumerable <object> > TransformAsync(ICasbinAuthorizationContext context, ICasbinAuthorizationData data)
        {
            if (data.ValueCount is 0)
            {
                throw new ArgumentException("Value count is invalid.");
            }

            object[]? requestValues = new object[data.ValueCount];
            int requestValuesLength = requestValues.Length;

            if (requestValuesLength > 0)
            {
                requestValues[0] = data.Value1;
            }
            if (requestValuesLength > 1)
            {
                requestValues[1] = data.Value2;
            }
            if (requestValuesLength > 2)
            {
                requestValues[2] = data.Value3;
            }
            if (requestValuesLength > 3)
            {
                requestValues[3] = data.Value4;
            }
            if (requestValuesLength > 4)
            {
                requestValues[4] = data.Value5;
            }
            if (requestValuesLength <= 5)
            {
                return(new ValueTask <IEnumerable <object> >(requestValues));
            }

            // Add the custom values
            if (data.CustomValues is null)
            {
                throw new ArgumentException("Value count is invalid.");
            }

            string[]? customValues = data.CustomValues;
            for (int index = 0; index < customValues.Length; index++)
            {
                requestValues[4 + index] = customValues[index];
            }
            return(new ValueTask <IEnumerable <object> >(requestValues));
        }
 public CasbinAuthorizationContext(ClaimsPrincipal user, ICasbinAuthorizationData data)
 {
     User = user;
     Data = data;
 }