Beispiel #1
0
        public void OnPre(PreInterceptArgs e)
        {
            StringBuilder sbLogMessage = new StringBuilder();

            sbLogMessage.AppendLine(e.ToString());
            logger.Log(string.Format("Log başladı : {0}", sbLogMessage.ToString()));
        }
Beispiel #2
0
        public object OnPre(PreInterceptArgs e)
        {
            // gerekli cache key ile kontrol ederek varsa cache'de çağırım öncesi metot'u execute
            // etmeden cache üzerinden ilgili veriyi geri dön.
            string cacheKey = string.Format("{0}_{1}", e.MethodName, string.Join("_", e.Arguments));
            object data;

            if (cacheProvider.TryGetData(cacheKey, out data))
            {
                //Proxy içinde esas metodu çalıştırma ben cache üzerinde veri buldum bu veriyi dön diyoruz
                e.OverrideReturnValue = true;
            }
            return(data);
        }
Beispiel #3
0
        private object OnPreIntercept(object[] aspects, PreInterceptArgs e)
        {
            object response = null;

            foreach (IInterception loopAttribute in aspects)
            {
                if (loopAttribute is IPreVoidInterception)
                {
                    ((IPreVoidInterception)loopAttribute).OnPre(e);
                }
                else if (loopAttribute is IPreInterception)
                {
                    response = ((IPreInterception)loopAttribute).OnPre(e);
                }
            }
            return(response);
        }
        public void OnPre(PreInterceptArgs e)
        {
            //Çalıştırılan metodu e.MethodName ile Roles arasında bağ kurup yetki kontrolü yapıp, yetkisi olmayan metodlar için hata fırlatırmalıyız
            if (Roles != null)
            {
                bool autrized = false;
                foreach (var role in Roles)
                {
                    autrized = System.Threading.Thread.CurrentPrincipal.IsInRole(role);
                    if (autrized)
                    {
                        break;
                    }
                }

                if (!autrized)
                {
                    throw new InvalidCredentialException($"{e.MethodName} is not authorized by your roles {String.Join(",", Roles)}");
                }
            }
        }
Beispiel #5
0
        public void OnPre(PreInterceptArgs e)
        {
            //Çalıştırılan metodu e.MethodName ile Roles arasında bağ kurup yetki kontrolü yapıp, yetkisi olmayan metodlar için hata fırlatırmalıyız
            if (Roles != null)
            {
                bool autrized = false;
                foreach (var role in Roles)
                {
                    autrized = Thread.CurrentPrincipal.IsInRole(role);
                    if (autrized)
                    {
                        break;
                    }
                }

                if (!autrized)
                {
                    throw new InvalidCredentialException($"{e.MethodName} metodunu çalıştırmak için yetkiniz yoktur");
                }
            }
        }
Beispiel #6
0
        //Attribute olarak eklenen metot çağırıldığında çalışacak olan metotdur.
        public override IMessage Invoke(IMessage msg)
        {
            var           methodCallMessage = msg as IMethodCallMessage;
            ReturnMessage returnMessage     = null;

            object[]      interceptions = null;
            InterceptArgs e             = CreateEventArgs(methodCallMessage);

            try
            {
                interceptions = GetInterceptions(methodCallMessage);

                // PreInterceptionlarımız çalıştırıyoruz, cache tarzı geriye donen attribute varsa bunlardan donen sonucu alıyoruz
                PreInterceptArgs preArg = new PreInterceptArgs(e);
                object           result = OnPreIntercept(interceptions, preArg);

                // OverrideReturnValue true ise esas metodu çalıştırmamıza gerek yok
                if (preArg.OverrideReturnValue)
                {
                    returnMessage = new ReturnMessage(result, null, 0, methodCallMessage.LogicalCallContext, methodCallMessage);
                }
                else
                {
                    // boş resultımız olduğuna göre ilgili metodu çalıştırabiliriz
                    result        = methodCallMessage.MethodBase.Invoke(new T(), methodCallMessage.InArgs);
                    returnMessage = new ReturnMessage(result, null, 0, methodCallMessage.LogicalCallContext, methodCallMessage);
                }

                OnPostIntercept(interceptions, new PostInterceptArgs(e, result));

                // PostInterceptionlarımız çalıştırdıktan sonra artık geriye çıktıyı dönebiliriz.
                return(returnMessage);
            }
            catch (Exception ex)
            {
                var exArg = new ExceptionInterceptArgs(e, ex);
                OnErrorIntercept(interceptions, exArg);
                return(new ReturnMessage(exArg.Ex, methodCallMessage));
            }
        }
Beispiel #7
0
 public void OnPre(PreInterceptArgs e)
 {
     mutex.WaitOne();//Thread lock
 }