コード例 #1
0
        /// <summary>
        /// PostFlush
        /// </summary>
        /// <param name="entities"></param>
        public override void PostFlush(System.Collections.ICollection entities)
        {
            try
            {
                if (m_logRecords.Count > 0)
                {
                    AuditLogRecord log = CreateNew(null, null, AuditLogType.TransactionBegin);
                    m_session.Save(log);

                    for (int i = 0; i < m_logRecords.Count; ++i)
                    {
                        m_session.Save(m_logRecords[i]);
                    }

                    log = CreateNew(null, null, AuditLogType.TransactionCompletion);
                    m_session.Save(log);
                }
            }
            catch (HibernateException ex)
            {
                throw new CallbackException(ex);
            }
            finally
            {
                m_logRecords.Clear();
            }
        }
コード例 #2
0
        /// <summary>
        /// OnDelete
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="id"></param>
        /// <param name="state"></param>
        /// <param name="propertyNames"></param>
        /// <param name="types"></param>
        public override void OnDelete(object entity, object id, object[] state, string[] propertyNames, IType[] types)
        {
            AuditLogRecord log = AuditLogInterceptor.CreateNew(entity, id, AuditLogType.Delete, m_session);

            m_logRecords.Add(log);

            base.OnDelete(entity, id, state, propertyNames, types);
        }
コード例 #3
0
        public void Get_audit_logs_from_payer_audit_logs()
        {
            var user = _client.Users[0];

            user.Accounting.Payment = 1000;
            session.SaveOrUpdate(user);
            Flush();

            var logs = AuditLogRecord.GetLogs(session, user.Payer, false);

            Assert.That(logs.Count, Is.GreaterThan(0), logs.Implode(l => l.Message));
            Assert.AreEqual("Изменено 'Платеж' было '800' стало '1000'", logs[0].Message, logs.Implode());
        }
コード例 #4
0
        public void AuditLogInterceptor_Records_Log_Entry_When_Item_Persisted()
        {
            // Save a user without audit logging
            UserDAO userDAO = new UserDAO();
            User    seller  = new User("Christian", "Bauer", "turin", "abc123", "*****@*****.**");

            userDAO.MakePersistent(seller);

            NHibernateHelper.CommitTransaction();
            NHibernateHelper.CloseSession();

            // Enable interceptor
            AuditLogInterceptor interceptor = new AuditLogInterceptor();

            NHibernateHelper.RegisterInterceptor(interceptor);
            interceptor.Session = NHibernateHelper.Session;
            interceptor.UserId  = seller.Id;

            // Save an item with audit logging enabled
            Item item = new Item(
                "Warfdale Nearfield Monitors",
                "Pair of 150W nearfield monitors for the home studio.",
                seller,
                new MonetaryAmount(1.99, "USD"),
                new MonetaryAmount(50.33, "USD"),
                DateTime.Now,
                DateTime.Now.AddDays(1)
                );

            ItemDAO itemDAO = new ItemDAO();

            itemDAO.MakePersistent(item);

            // Synchronize state to trigger interceptor
            NHibernateHelper.Session.Flush();

            // Check audit log
            IQuery findAuditLogRecord = NHibernateHelper.Session.CreateQuery("from AuditLogRecord record where record.EntityId = :id");

            findAuditLogRecord.SetParameter("id", item.Id);
            AuditLogRecord foundRecord = findAuditLogRecord.UniqueResult <AuditLogRecord>();

            Assert.IsNotNull(foundRecord);
            Assert.AreEqual(foundRecord.UserId, seller.Id);

            NHibernateHelper.CommitTransaction();
            NHibernateHelper.CloseSession();

            // Deregister interceptor
            NHibernateHelper.RegisterInterceptor(null);
        }
コード例 #5
0
        internal static AuditLogRecord CreateNew(object entity, object id, AuditLogType logType, ISession session)
        {
            AuditLogRecord log = new AuditLogRecord();

            log.EntityId   = id == null ? string.Empty : id.ToString();
            log.EntityName = entity == null ? string.Empty : session.GetEntityName(entity);
            log.LogType    = logType.ToString();
            log.Created    = DateTime.Now;
            log.CreatedBy  = SystemConfiguration.UserName;
            log.ClientId   = SystemConfiguration.ClientId;
            log.OrgId      = SystemConfiguration.OrgId;
            log.IsActive   = true;
            return(log);
        }
コード例 #6
0
 public IList <AuditRecord> ForPayer(Payer payer, ISession session)
 {
     if (payer != null && Types.Contains(LogMessageType.Payer))
     {
         var payerMessages = AuditLogRecord.GetLogs(session, payer, false);
         return(payerMessages.Select(m => new AuditRecord {
             Message = m.Message,
             ObjectId = m.ObjectId,
             Name = m.Name,
             Type = m.LogType,
             WriteTime = m.LogTime,
             UserName = m.OperatorName,
             MessageType = LogMessageType.System,
             ShowOnlyPayer = m.ShowOnlyPayer
         }).ToList());
     }
     return(new List <AuditRecord>());
 }
コード例 #7
0
        /// <summary>
        /// OnDelete
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="id"></param>
        /// <param name="state"></param>
        /// <param name="propertyNames"></param>
        /// <param name="types"></param>
        public override void OnDelete(object entity, object id, object[] state, string[] propertyNames, IType[] types)
        {
            if (IsAuditable(entity))
            {
                AuditLogRecord log = CreateNew(entity, id, AuditLogType.Delete);

                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < propertyNames.Length; ++i)
                {
                    sb.Append(propertyNames[i]);
                    sb.Append(":");
                    sb.Append(GetStateString(state, types, i));
                    sb.Append(" | ");
                }
                log.Message = sb.ToString().Substring(0, Math.Min(sb.Length, 4000));
                m_logRecords.Add(log);
            }

            base.OnDelete(entity, id, state, propertyNames, types);
        }
コード例 #8
0
        /// <summary>
        /// OnFlushDirty
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="id"></param>
        /// <param name="currentState"></param>
        /// <param name="previousState"></param>
        /// <param name="propertyNames"></param>
        /// <param name="types"></param>
        /// <returns></returns>
        public override bool OnFlushDirty(object entity, object id, object[] currentState, object[] previousState,
                                          string[] propertyNames, IType[] types)
        {
            if (IsAuditable(entity))
            {
                AuditLogRecord log = CreateNew(entity, id, AuditLogType.Update);

                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < propertyNames.Length; ++i)
                {
                    sb.Append(propertyNames[i]);
                    sb.Append(":");
                    sb.Append(GetStateString(previousState, types, i));
                    sb.Append("->");
                    sb.Append(GetStateString(currentState, types, i));
                    sb.Append(" | ");
                }
                log.Message = sb.ToString().Substring(0, Math.Min(sb.Length, 4000));
                m_logRecords.Add(log);
            }

            return(base.OnFlushDirty(entity, id, currentState, previousState, propertyNames, types));
        }
コード例 #9
0
        public void Edit(uint billingCode,
                         uint clientCode,
                         string tab,
                         uint currentJuridicalOrganizationId,
                         [SmartBinder(Expect = "filter.Types")] BillingFilter filter)
        {
            filter.ServiceId = clientCode;
            filter.PayerId   = billingCode;
            filter.Tab       = tab;

            var payer = filter.Payer;

            var userIds = payer.Users.Select(u => u.Id).ToArray();

            PropertyBag["UsersMessages"] = DbSession.Query <UserMessage>()
                                           .Where(m => userIds.Contains(m.Id) && m.ShowMessageCount > 0)
                                           .ToList();

            PropertyBag["filter"]          = filter;
            PropertyBag["LogRecords"]      = AuditLogRecord.GetLogs(DbSession, payer, filter.Types.Contains(LogMessageType.System));
            PropertyBag["Instance"]        = payer;
            PropertyBag["payer"]           = payer;
            PropertyBag["MailSentHistory"] = MailSentEntity.GetHistory(payer);
            PropertyBag["Today"]           = DateTime.Today;
            PropertyBag["Recipients"]      = DbSession.Query <Recipient>().OrderBy(r => r.Name).ToList();
            PropertyBag["suppliers"]       = DbSession.Query <Supplier>().Where(s => s.Payer == payer).OrderBy(s => s.Name).ToList();
            PropertyBag["clients"]         = payer.Clients.OrderBy(c => c.Name).ToList();
            PropertyBag["Users"]           = payer.Users.Where(u => u.RootService.Type != ServiceType.Supplier).ToList();
            PropertyBag["Addresses"]       = payer.Addresses;
            PropertyBag["Reports"]         = payer.GetReportAccounts();
            PropertyBag["userMessage"]     = new UserMessage();

            if (currentJuridicalOrganizationId > 0)
            {
                PropertyBag["currentJuridicalOrganizationId"] = currentJuridicalOrganizationId;
            }
        }
コード例 #10
0
 internal static AuditLogRecord CreateNew(object entity, object id, AuditLogType logType, ISession session)
 {
     AuditLogRecord log = new AuditLogRecord();
     log.EntityId = id == null ? string.Empty : id.ToString();
     log.EntityName = entity == null ? string.Empty : session.GetEntityName(entity);
     log.LogType = logType.ToString();
     log.Created = DateTime.Now;
     log.CreatedBy = SystemConfiguration.UserName;
     log.ClientId = SystemConfiguration.ClientId;
     log.OrgId = SystemConfiguration.OrgId;
     log.IsActive = true;
     return log;
 }