예제 #1
0
        public static void SetCreationAuditProperties(
            IMultiTenancyConfig multiTenancyConfig,
            object entityAsObj,
            int?tenantId,
            long?userId)
        {
            var entityWithCreationTime = entityAsObj as IHasCreationTime;

            if (entityWithCreationTime == null)
            {
                //Object does not implement IHasCreationTime
                return;
            }

            if (entityWithCreationTime.CreationTime == default(DateTime))
            {
                AbpDebug.WriteLine($"Clock.Provider:{Clock.Provider}");
                entityWithCreationTime.CreationTime = Clock.Now;
            }

            if (!(entityAsObj is ICreationAudited))
            {
                //Object does not implement ICreationAudited
                return;
            }

            if (!userId.HasValue)
            {
                //Unknown user
                return;
            }

            var entity = entityAsObj as ICreationAudited;

            if (entity.CreatorUserId != null)
            {
                //CreatorUserId is already set
                return;
            }

            if (multiTenancyConfig?.IsEnabled == true)
            {
                if (MultiTenancyHelper.IsMultiTenantEntity(entity) &&
                    !MultiTenancyHelper.IsTenantEntity(entity, tenantId))
                {
                    //A tenant entitiy is created by host or a different tenant
                    return;
                }

                if (tenantId.HasValue && MultiTenancyHelper.IsHostEntity(entity))
                {
                    //Tenant user created a host entity
                    return;
                }
            }

            //Finally, set CreatorUserId!
            entity.CreatorUserId = userId;
        }
예제 #2
0
        public static void SetCreationAuditProperties(
            object entityAsObj,
            string tenantName,
            string user)
        {
            var entityWithCreationTime = entityAsObj as IHasCreationTime;

            if (entityWithCreationTime == null)
            {
                //Object does not implement IHasCreationTime
                return;
            }

            if (entityWithCreationTime.CreationTime == default(DateTime))
            {
                entityWithCreationTime.CreationTime = Clock.Now;
            }

            if (!(entityAsObj is ICreationAudited))
            {
                //Object does not implement ICreationAudited
                return;
            }

            if (user.IsNullOrWhiteSpace())
            {
                //Unknown user
                return;
            }

            var entity = entityAsObj as ICreationAudited;

            if (entity.Creator != null)
            {
                //CreatorUserId is already set
                return;
            }

            if (MultiTenancyConfig.IsEnabled)
            {
                if (MultiTenancyHelper.IsMultiTenantEntity(entity) &&
                    !MultiTenancyHelper.IsTenantEntity(entity, tenantName))
                {
                    //A tenant entitiy is created by host or a different tenant
                    return;
                }

                if (!tenantName.IsNullOrWhiteSpace() && MultiTenancyHelper.IsHostEntity(entity))
                {
                    //Tenant user created a host entity
                    return;
                }
            }

            //Finally, set Creator!
            entity.Creator = user;
        }
예제 #3
0
        public static string GetHardDeleteKey(object entity, long?tenantId)
        {
            if (MultiTenancyHelper.IsMultiTenantEntity(entity))
            {
                var tenantIdString = tenantId.HasValue ? tenantId.ToString() : "null";
                return(entity.GetType().FullName + ";TenantId=" + tenantIdString + ";Id=" + GetEntityId(entity));
            }

            return(entity.GetType().FullName + ";Id=" + GetEntityId(entity));
        }
예제 #4
0
        /// <summary>
        /// 获取硬删除键
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="tenantName"></param>
        /// <returns></returns>
        public static string GetHardDeleteKey(object entity, string tenantName)
        {
            if (MultiTenancyHelper.IsMultiTenantEntity(entity))
            {
                var tenantIdString = string.IsNullOrWhiteSpace(tenantName) ? tenantName : "null";
                return(entity.GetType().FullName + ";TenantId=" + tenantIdString + ";Id=" + GetEntityId(entity));
            }

            return(entity.GetType().FullName + ";Id=" + GetEntityId(entity));
        }
        public static void SetModificationAuditProperties(
            IMultiTenancyConfig multiTenancyConfig,
            object entityAsObj,
            int?tenantId,
            long?userId,
            IReadOnlyList <AuditFieldConfiguration> auditFields)
        {
            if (entityAsObj is IHasModificationTime)
            {
                entityAsObj.As <IHasModificationTime>().LastModificationTime = Clock.Now;
            }

            if (!(entityAsObj is IModificationAudited))
            {
                //Entity does not implement IModificationAudited
                return;
            }

            var entity = entityAsObj.As <IModificationAudited>();

            if (userId == null)
            {
                //Unknown user
                entity.LastModifierUserId = null;
                return;
            }

            if (multiTenancyConfig?.IsEnabled == true)
            {
                if (MultiTenancyHelper.IsMultiTenantEntity(entity) &&
                    !MultiTenancyHelper.IsTenantEntity(entity, tenantId))
                {
                    //A tenant entitiy is modified by host or a different tenant
                    entity.LastModifierUserId = null;
                    return;
                }

                if (tenantId.HasValue && MultiTenancyHelper.IsHostEntity(entity))
                {
                    //Tenant user modified a host entity
                    entity.LastModifierUserId = null;
                    return;
                }
            }

            var lastModifierUserIdFilter = auditFields?.FirstOrDefault(e => e.FieldName == AbpAuditFields.LastModifierUserId);

            if (lastModifierUserIdFilter != null && !lastModifierUserIdFilter.IsSavingEnabled)
            {
                return;
            }

            //Finally, set LastModifierUserId!
            entity.LastModifierUserId = userId;
        }
예제 #6
0
        private static MultiTenancyContext ConstruirContext()
        {
            string connectionString       = MultiTenancyHelper.RecuperarStringConexao();
            string nomeUsuarioAutenticado = AutenticacaoHelper.RecuperarUsuarioAutenticado();

            if (!string.IsNullOrEmpty(connectionString))
            {
                return(new MultiTenancyContext(connectionString, nomeUsuarioAutenticado));
            }

            return(null);
        }
예제 #7
0
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var currentTenant = string.Empty;

            if (Request.Url != null)
            {
                currentTenant = MultiTenancyHelper.GetCurrentTenancyName(Request.Url.AbsoluteUri);
            }

            Session[TenancyKey] = currentTenant;

            base.OnActionExecuting(filterContext);
        }
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            bool possuiCliente = MultiTenancyHelper.PossuiCliente();

            if ((possuiCliente && !this.MultiTenancyNecessario) ||
                (!possuiCliente && this.MultiTenancyNecessario))
            {
                actionContext.Response         = new HttpResponseMessage(HttpStatusCode.Unauthorized);
                actionContext.Response.Content = new StringContent("{\"Erro\": \"Você não tem permissão de acessar este serviço!\"}");
                actionContext.Response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            }

            base.OnActionExecuting(actionContext);
        }
        public static void SetModificationAuditProperties(
            IMultiTenancyConfig multiTenancyConfig,
            object entityAsObj,
            long?tenantId,
            long?userId)
        {
            if (entityAsObj is IHasModificationTime)
            {
                entityAsObj.As <IHasModificationTime>().LastModificationTime = Clock.Now;
            }

            if (!(entityAsObj is IModificationAudited))
            {
                //Entity does not implement IModificationAudited
                return;
            }

            var entity = entityAsObj.As <IModificationAudited>();

            if (userId == null)
            {
                //Unknown user
                entity.LastModifierUserId = null;
                return;
            }

            if (multiTenancyConfig?.IsEnabled == true)
            {
                if (MultiTenancyHelper.IsMultiTenantEntity(entity) &&
                    !MultiTenancyHelper.IsTenantEntity(entity, tenantId))
                {
                    //A tenant entitiy is modified by host or a different tenant
                    entity.LastModifierUserId = null;
                    return;
                }

                if (tenantId.HasValue && MultiTenancyHelper.IsHostEntity(entity))
                {
                    //Tenant user modified a host entity
                    entity.LastModifierUserId = null;
                    return;
                }
            }

            //Finally, set LastModifierUserId!
            entity.LastModifierUserId = userId;
        }
예제 #10
0
        public static void SetModificationAuditProperties(
            object entityAsObj,
            string tenantName,
            string user)
        {
            if (entityAsObj is IHasModificationTime)
            {
                entityAsObj.As <IHasModificationTime>().LastModificationTime = Clock.Now;
            }

            if (!(entityAsObj is IModificationAudited))
            {
                //Entity does not implement IModificationAudited
                return;
            }

            var entity = entityAsObj.As <IModificationAudited>();

            if (user.IsNullOrWhiteSpace())
            {
                //Unknown user
                entity.LastModifier = null;
                return;
            }

            if (MultiTenancyConfig.IsEnabled)
            {
                if (MultiTenancyHelper.IsMultiTenantEntity(entity) &&
                    !MultiTenancyHelper.IsTenantEntity(entity, tenantName))
                {
                    //A tenant entitiy is modified by host or a different tenant
                    entity.LastModifier = null;
                    return;
                }

                if (!tenantName.IsNullOrWhiteSpace() && MultiTenancyHelper.IsHostEntity(entity))
                {
                    //Tenant user modified a host entity
                    entity.LastModifier = null;
                    return;
                }
            }

            //Finally, set LastModifier!
            entity.LastModifier = user;
        }
예제 #11
0
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            Mapper.Initialize(cfg =>
            {
                cfg.SourceMemberNamingConvention      = new LowerUnderscoreNamingConvention();
                cfg.DestinationMemberNamingConvention = new PascalCaseNamingConvention();
                cfg.CreateMissingTypeMaps             = true;
            });

            MultiTenancyHelper multiTenancy = DependencyResolver.Current.GetService <MultiTenancyHelper>();

            multiTenancy.CarregarClientesCadastrados();
        }
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            bool possuiCliente = MultiTenancyHelper.PossuiCliente();

            if ((possuiCliente && !this.MultiTenancyNecessario) ||
                (!possuiCliente && this.MultiTenancyNecessario))
            {
                filterContext.Result = new RedirectToRouteResult(
                    new RouteValueDictionary
                {
                    { "area", "" },
                    { "controller", "Acesso" },
                    { "action", "AcessoNegado" },
                    { "mensagem", "Você não tem permissão de acessar esta página!" }
                });
            }

            base.OnActionExecuting(filterContext);
        }
예제 #13
0
 protected void Application_PreRequestHandlerExecute()
 {
     if (!this.Request.Url.ToString().Contains("Acesso/AcessoNegado"))
     {
         try
         {
             MultiTenancyHelper.CarregarConfiguracaoCliente();
         }
         catch (Exception ex)
         {
             this.Response.RedirectToRoute("Default",
                                           new RouteValueDictionary
             {
                 { "area", "" },
                 { "controller", "Acesso" },
                 { "action", "AcessoNegado" },
                 { "mensagem", ex.Message }
             });
         }
     }
 }
        public static void SetCreationAuditProperties(
            IMultiTenancyConfig multiTenancyConfig,
            object entityAsObj,
            int?tenantId,
            long?userId,
            IReadOnlyList <AuditFieldConfiguration> auditFields)
        {
            var entityWithCreationTime = entityAsObj as IHasCreationTime;

            if (entityWithCreationTime == null)
            {
                //Object does not implement IHasCreationTime
                return;
            }

            if (entityWithCreationTime.CreationTime == default)
            {
                entityWithCreationTime.CreationTime = Clock.Now;
            }

            if (!(entityAsObj is ICreationAudited))
            {
                //Object does not implement ICreationAudited
                return;
            }

            if (!userId.HasValue)
            {
                //Unknown user
                return;
            }

            var entity = entityAsObj as ICreationAudited;

            if (entity.CreatorUserId != null)
            {
                //CreatorUserId is already set
                return;
            }

            if (multiTenancyConfig?.IsEnabled == true)
            {
                if (MultiTenancyHelper.IsMultiTenantEntity(entity) &&
                    !MultiTenancyHelper.IsTenantEntity(entity, tenantId))
                {
                    //A tenant entity is created by host or a different tenant
                    return;
                }

                if (tenantId.HasValue && MultiTenancyHelper.IsHostEntity(entity))
                {
                    //Tenant user created a host entity
                    return;
                }
            }

            var creationUserIdFilter = auditFields?.FirstOrDefault(e => e.FieldName == AbpAuditFields.CreationUserId);

            if (creationUserIdFilter != null && !creationUserIdFilter.IsSavingEnabled)
            {
                return;
            }

            //Finally, set CreatorUserId!
            entity.CreatorUserId = userId;
        }