Forráskód Böngészése

User Handling verbessert!

Arne Diekmann 8 éve
szülő
commit
b782ac316b
21 módosított fájl, 185 hozzáadás és 130 törlés
  1. 1 1
      GreenTree.Nachtragsmanagement.Core/AppendixVersion.cs
  2. 7 7
      GreenTree.Nachtragsmanagement.Core/Authentication/IUserHelper.cs
  3. 2 2
      GreenTree.Nachtragsmanagement.Core/Authentication/UserContext.cs
  4. 24 11
      GreenTree.Nachtragsmanagement.Core/Authentication/UserHelper.cs
  5. 31 0
      GreenTree.Nachtragsmanagement.Core/Converter/UserJsonConverter.cs
  6. 9 0
      GreenTree.Nachtragsmanagement.Core/Domain/User/User.cs
  7. 1 0
      GreenTree.Nachtragsmanagement.Core/GreenTree.Nachtragsmanagement.Core.csproj
  8. 2 2
      GreenTree.Nachtragsmanagement.Core/Properties/AssemblyInfo.cs
  9. 2 2
      GreenTree.Nachtragsmanagement.Web.Framework/Authorization/FunctionAuthorizeAttribute.cs
  10. 2 2
      GreenTree.Nachtragsmanagement.Web.Framework/Properties/AssemblyInfo.cs
  11. 10 10
      GreenTree.Nachtragsmanagement.Web/Controllers/AdminController.cs
  12. 23 23
      GreenTree.Nachtragsmanagement.Web/Controllers/AppendixController.cs
  13. 24 24
      GreenTree.Nachtragsmanagement.Web/Controllers/DeviationController.cs
  14. 7 7
      GreenTree.Nachtragsmanagement.Web/Controllers/GlobalController.cs
  15. 1 1
      GreenTree.Nachtragsmanagement.Web/Controllers/HomeController.cs
  16. 4 4
      GreenTree.Nachtragsmanagement.Web/Controllers/LoginController.cs
  17. 17 17
      GreenTree.Nachtragsmanagement.Web/Controllers/MiscController.cs
  18. 14 14
      GreenTree.Nachtragsmanagement.Web/Controllers/SiteController.cs
  19. 1 1
      GreenTree.Nachtragsmanagement.Web/Extensions/MVCxGridViewGeneratorHelper.cs
  20. 2 2
      GreenTree.Nachtragsmanagement.Web/Properties/AssemblyInfo.cs
  21. 1 0
      GreenTree.Nachtragsmanagement.Web/Web.config

+ 1 - 1
GreenTree.Nachtragsmanagement.Core/AppendixVersion.cs

@@ -15,7 +15,7 @@ namespace GreenTree.Nachtragsmanagement.Core
         {
             get
             {
-                return "0.9.0.0";
+                return "0.9.0.1";
             }
         }
     }

+ 7 - 7
GreenTree.Nachtragsmanagement.Core/Authentication/IUserHelper.cs

@@ -12,33 +12,33 @@ namespace GreenTree.Nachtragsmanagement.Core.Authentication
         /// <summary>
         /// Evaluates the current user from request cookies
         /// </summary>
-        User FromCookies();
+        User FromCookiesOrSession();
 
         /// <summary>
         /// Evaluates the current user from request cookies
         /// </summary>
         /// <param name="expirationHoursIncrease">The hours the authCookie will be increased if it exists.</param>
-        User FromCookies(int expirationHoursIncrease);
+        User FromCookiesOrSession(int expirationHoursIncrease);
 
         /// <summary>
         /// Writes the current user to response cookies
         /// </summary>
         /// <param name="user">The current authenticated user.</param>
-        void ToCookies(User user);
+        void ToCookiesAndSession(User user);
 
         /// <summary>
         /// Writes the current user to response cookies
         /// </summary>
         /// <param name="user">The current authenticated user.</param>
         /// <param name="setRequestCookie">Set also the request cookie for further authorization.</param>
-        void ToCookies(User user, bool setRequestCookie);
+        void ToCookiesAndSession(User user, bool setRequestCookie);
 
         /// <summary>
         /// Writes the current user to response cookies
         /// </summary>
         /// <param name="user">The current authenticated user.</param>
         /// <param name="expirationDate">The cookie expiration date.</param>
-        void ToCookies(User user, DateTime expirationDate);
+        void ToCookiesAndSession(User user, DateTime expirationDate);
 
         /// <summary>
         /// Writes the current user to response cookies
@@ -46,11 +46,11 @@ namespace GreenTree.Nachtragsmanagement.Core.Authentication
         /// <param name="user">The current authenticated user.</param>
         /// <param name="expirationDate">The cookie expiration date.</param>
         /// <param name="setRequestCookie">Set also the request cookie for further authorization.</param>
-        void ToCookies(User user, DateTime expirationDate, bool setRequestCookie);
+        void ToCookiesAndSession(User user, DateTime expirationDate, bool setRequestCookie);
 
         /// <summary>
         /// Clears the authentication cookie
         /// </summary>
-        void ClearCookie();
+        void ClearCookieAndSession();
     }
 }

+ 2 - 2
GreenTree.Nachtragsmanagement.Core/Authentication/UserContext.cs

@@ -14,10 +14,10 @@ namespace GreenTree.Nachtragsmanagement.Core.Authentication
         {
             get
             {
-                var container = Singleton<Autofac.IContainer>.Instance;
+                var container = Singleton<IContainer>.Instance;
                 var userHelper = container.Resolve<IUserHelper>();
 
-                return userHelper.FromCookies();
+                return userHelper.FromCookiesOrSession();
             }
         }
     }

+ 24 - 11
GreenTree.Nachtragsmanagement.Core/Authentication/UserHelper.cs

@@ -24,25 +24,33 @@ namespace GreenTree.Nachtragsmanagement.Core.Authentication
         /// <summary>
         /// Evaluates the current user from request cookies
         /// </summary>
-        public User FromCookies()
+        public User FromCookiesOrSession()
         {
-            return FromCookies(2);
+            return FromCookiesOrSession(8);
         }
 
         /// <summary>
         /// Evaluates the current user from request cookies
         /// </summary>
         /// <param name="expirationHoursIncrease">The hours the authCookie will be increased if it exists.</param>
-        public User FromCookies(int expirationHoursIncrease)
+        public User FromCookiesOrSession(int expirationHoursIncrease)
         {
             if (HttpContext.Current == null || HttpContext.Current.Session == null) return null;
 
+            User user = null;
+
+            if (HttpContext.Current.Session["auth"] != null)
+                user = HttpContext.Current.Session["auth"] as User;
+
+            if (user != null)
+                return user;
+
             var authCookie = HttpContext.Current.Request.Cookies["auth"];
 
             if (authCookie == null)
                 return null;
 
-            var user = JsonConvert.DeserializeObject<User>(StaticHelper.DecompressString(authCookie.Value));
+            user = JsonConvert.DeserializeObject<User>(StaticHelper.DecompressString(authCookie.Value));
 
             if (user != null)
             {
@@ -58,9 +66,9 @@ namespace GreenTree.Nachtragsmanagement.Core.Authentication
         /// Writes the current user to response cookies
         /// </summary>
         /// <param name="user">The current authenticated user.</param>
-        public void ToCookies(User user)
+        public void ToCookiesAndSession(User user)
         {
-            ToCookies(user, false);
+            ToCookiesAndSession(user, false);
         }
 
         /// <summary>
@@ -68,7 +76,7 @@ namespace GreenTree.Nachtragsmanagement.Core.Authentication
         /// </summary>
         /// <param name="user">The current authenticated user.</param>
         /// <param name="setRequestCookie">Set also the request cookie for further authorization.</param>
-        public void ToCookies(User user, bool setRequestCookie)
+        public void ToCookiesAndSession(User user, bool setRequestCookie)
         {
             if (HttpContext.Current == null || HttpContext.Current.Session == null) return;
 
@@ -85,6 +93,8 @@ namespace GreenTree.Nachtragsmanagement.Core.Authentication
 
             if (setRequestCookie)
                 HttpContext.Current.Request.Cookies.Set(authCookie);
+
+            HttpContext.Current.Session["auth"] = user;
         }
 
         /// <summary>
@@ -92,9 +102,9 @@ namespace GreenTree.Nachtragsmanagement.Core.Authentication
         /// </summary>
         /// <param name="user">The current authenticated user.</param>
         /// <param name="expirationDate">The cookie expiration date.</param>
-        public void ToCookies(User user, DateTime expirationDate)
+        public void ToCookiesAndSession(User user, DateTime expirationDate)
         {
-            ToCookies(user, expirationDate, false);
+            ToCookiesAndSession(user, expirationDate, false);
         }
 
         /// <summary>
@@ -103,7 +113,7 @@ namespace GreenTree.Nachtragsmanagement.Core.Authentication
         /// <param name="user">The current authenticated user.</param>
         /// <param name="expirationDate">The cookie expiration date.</param>
         /// <param name="setRequestCookie">Set also the request cookie for further authorization.</param>
-        public void ToCookies(User user, DateTime expirationDate, bool setRequestCookie)
+        public void ToCookiesAndSession(User user, DateTime expirationDate, bool setRequestCookie)
         {
             if (HttpContext.Current == null || HttpContext.Current.Session == null) return;
 
@@ -120,12 +130,14 @@ namespace GreenTree.Nachtragsmanagement.Core.Authentication
 
             if (setRequestCookie)
                 HttpContext.Current.Request.Cookies.Set(authCookie);
+
+            HttpContext.Current.Session["auth"] = user;
         }
 
         /// <summary>
         /// Clears the authentication cookie
         /// </summary>
-        public void ClearCookie()
+        public void ClearCookieAndSession()
         {
             if (HttpContext.Current == null || HttpContext.Current.Session == null) return;
 
@@ -136,6 +148,7 @@ namespace GreenTree.Nachtragsmanagement.Core.Authentication
             authCookie.Expires = DateTime.Now.AddHours(-1);
 
             HttpContext.Current.Response.Cookies.Set(authCookie);
+            HttpContext.Current.Session.Remove("auth");
         }
     }
 }

+ 31 - 0
GreenTree.Nachtragsmanagement.Core/Converter/UserJsonConverter.cs

@@ -0,0 +1,31 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GreenTree.Nachtragsmanagement.Core.Converter
+{
+    public class UserJsonConverter<User> : JsonConverter
+    {
+        public override bool CanConvert(Type objectType)
+        {
+            if (objectType != typeof(User)) return false;
+
+            return true;
+        }
+
+        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+        {
+            if (objectType != typeof(User)) return null;
+
+            return existingValue;
+        }
+
+        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+        {
+
+        }
+    }
+}

+ 9 - 0
GreenTree.Nachtragsmanagement.Core/Domain/User/User.cs

@@ -3,11 +3,14 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using GreenTree.Nachtragsmanagement.Core.Converter;
 using GreenTree.Nachtragsmanagement.Core.Domain.Config;
 using GreenTree.Nachtragsmanagement.Core.Domain.Misc;
+using Newtonsoft.Json;
 
 namespace GreenTree.Nachtragsmanagement.Core.Domain.User
 {
+    //[JsonConverter(typeof(UserJsonConverter<>))]
     public class User : BaseEntity
     {
         #region Fields
@@ -79,9 +82,11 @@ namespace GreenTree.Nachtragsmanagement.Core.Domain.User
         /// </summary>
         public bool? IsChanged { get; set; }
 
+
         /// <summary>
         /// Roles the user have
         /// </summary>
+        [JsonIgnore]
         public virtual ICollection<Role> Roles
         {
             get { return _roles ?? (_roles = new List<Role>()); }
@@ -91,6 +96,7 @@ namespace GreenTree.Nachtragsmanagement.Core.Domain.User
         /// <summary>
         /// MailNotification related to the user
         /// </summary>
+        [JsonIgnore]
         public virtual ICollection<MailNotification> MailNotifications
         {
             get { return _mailNotifications ?? ( _mailNotifications = new List<MailNotification>()); }
@@ -100,6 +106,7 @@ namespace GreenTree.Nachtragsmanagement.Core.Domain.User
         /// <summary>
         /// UserConfigItems related to the user
         /// </summary>
+        [JsonIgnore]
         public virtual ICollection<UserConfigItem> UserConfigItems
         {
             get { return _userConfigItems ?? ( _userConfigItems = new List<UserConfigItem>()); }
@@ -126,6 +133,8 @@ namespace GreenTree.Nachtragsmanagement.Core.Domain.User
             if (String.IsNullOrEmpty(functionName))
                 return false;
 
+            if (CurrentRole == null) return false;
+
             return
                 CurrentRole.Functions
                     .Any(f => f.Name == functionName);

+ 1 - 0
GreenTree.Nachtragsmanagement.Core/GreenTree.Nachtragsmanagement.Core.csproj

@@ -86,6 +86,7 @@
     <Compile Include="Configuration\AppendixConfigurationSection.cs" />
     <Compile Include="Configuration\LdapServerElement.cs" />
     <Compile Include="Configuration\MailServerElement.cs" />
+    <Compile Include="Converter\UserJsonConverter.cs" />
     <Compile Include="Data\IRepository.cs" />
     <Compile Include="Domain\Appendix\Appendix.cs" />
     <Compile Include="Domain\Appendix\Category.cs" />

+ 2 - 2
GreenTree.Nachtragsmanagement.Core/Properties/AssemblyInfo.cs

@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
 // indem Sie "*" wie unten gezeigt eingeben:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.9.0.0")]
-[assembly: AssemblyFileVersion("0.9.0.0")]
+[assembly: AssemblyVersion("0.9.0.1")]
+[assembly: AssemblyFileVersion("0.9.0.1")]

+ 2 - 2
GreenTree.Nachtragsmanagement.Web.Framework/Authorization/FunctionAuthorizeAttribute.cs

@@ -46,7 +46,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Framework.Authorization
         /// <returns>Valid access.</returns>
         protected override bool AuthorizeCore(HttpContextBase httpContext)
         {
-            var cookieUser = _userHelper.FromCookies();
+            var cookieUser = _userHelper.FromCookiesOrSession();
 
             if (cookieUser == null)
                 return false;
@@ -66,7 +66,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Framework.Authorization
             else
                 dbUser.CurrentRole = role;
 
-            _userHelper.ToCookies(dbUser, DateTime.Now.AddHours(8), true);
+            _userHelper.ToCookiesAndSession(dbUser, DateTime.Now.AddHours(8), true);
 
             foreach (var function in dbUser.CurrentRole.Functions)
             {

+ 2 - 2
GreenTree.Nachtragsmanagement.Web.Framework/Properties/AssemblyInfo.cs

@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
 // indem Sie "*" wie unten gezeigt eingeben:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.9.0.0")]
-[assembly: AssemblyFileVersion("0.9.0.0")]
+[assembly: AssemblyVersion("0.9.0.1")]
+[assembly: AssemblyFileVersion("0.9.0.1")]

+ 10 - 10
GreenTree.Nachtragsmanagement.Web/Controllers/AdminController.cs

@@ -140,7 +140,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _userService.InsertUser(user);
 
-                    _logger.Entity(user, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(user, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
                 }
                 else
                 {
@@ -158,7 +158,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _userService.UpdateUser(user);
 
-                    _logger.Entity(user, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(user, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
 
                 return new JsonResult
@@ -168,7 +168,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Speicherung eines Benutzers.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Speicherung eines Benutzers.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -188,7 +188,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                 if (user != null)
                     _userService.DeleteUser(user);
 
-                _logger.Entity(user, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
+                _logger.Entity(user, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookiesOrSession());
 
                 return new JsonResult
                 {
@@ -197,7 +197,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Löschung eines Benutzers.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Löschung eines Benutzers.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -301,7 +301,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _userService.InsertRole(role);
 
-                    _logger.Entity(role, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(role, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
                 }
                 else
                 {
@@ -314,7 +314,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _userService.UpdateRole(role);
 
-                    _logger.Entity(role, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(role, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
 
                 return new JsonResult
@@ -324,7 +324,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Speicherung einer Rolle.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Speicherung einer Rolle.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -358,7 +358,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                 if (role != null)
                     _userService.DeleteRole(role);
 
-                _logger.Entity(role, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
+                _logger.Entity(role, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookiesOrSession());
 
                 return new JsonResult
                 {
@@ -367,7 +367,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Löschung einer Rolle.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Löschung einer Rolle.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }

+ 23 - 23
GreenTree.Nachtragsmanagement.Web/Controllers/AppendixController.cs

@@ -62,7 +62,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
         [FunctionAuthorize(true, "Appendix-Appendices")]
         public ActionResult ViewAppendices()
         {
-            var currentUser = _userHelper.FromCookies();
+            var currentUser = _userHelper.FromCookiesOrSession();
 
             var appendices = _appendixService.GetAllUserAssignedAppendices(currentUser);
             var appendixModels = appendices
@@ -100,7 +100,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
         /// </summary>
         public ActionResult PartialAppendices(int scrollHeight = -1)
         {
-            var currentUser = _userHelper.FromCookies();
+            var currentUser = _userHelper.FromCookiesOrSession();
 
             var appendices = _appendixService.GetAllUserAssignedAppendices(currentUser);
             var appendixModels = appendices
@@ -122,7 +122,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             if (String.IsNullOrEmpty(displayMode))
                 return new EmptyResult();
 
-            var currentUser = _userHelper.FromCookies();
+            var currentUser = _userHelper.FromCookiesOrSession();
 
             var appendices = _appendixService.GetAllUserAssignedAppendices(currentUser);
             var appendixModels = appendices
@@ -535,7 +535,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _appendixService.InsertAppendix(appendix);
 
-                    _logger.Entity(appendix, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(appendix, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
                 }
                 else
                 {
@@ -561,7 +561,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _appendixService.UpdateAppendix(appendix);
 
-                    _logger.Entity(appendix, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(appendix, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
 
                 return new JsonResult
@@ -571,7 +571,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Speicherung eines Nachtrags.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Speicherung eines Nachtrags.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -591,7 +591,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                 if (appendix != null)
                     _appendixService.DeleteAppendix(appendix);
 
-                _logger.Entity(appendix, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
+                _logger.Entity(appendix, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookiesOrSession());
 
                 return new JsonResult
                 {
@@ -600,7 +600,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Löschung eines Nachtrags.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Löschung eines Nachtrags.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -685,7 +685,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _appendixService.InsertInvoice(invoice);
 
-                    _logger.Entity(invoice, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(invoice, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
                 }
                 else
                 {
@@ -697,7 +697,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _appendixService.UpdateInvoice(invoice);
 
-                    _logger.Entity(invoice, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(invoice, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
 
                 return new JsonResult
@@ -707,7 +707,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Speicherung einer Rechnung.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Speicherung einer Rechnung.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -727,7 +727,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                 if (invoice != null)
                     _appendixService.DeleteInvoice(invoice);
 
-                _logger.Entity(invoice, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
+                _logger.Entity(invoice, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookiesOrSession());
 
                 return new JsonResult
                 {
@@ -736,7 +736,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Löschung einer Rechnung.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Löschung einer Rechnung.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -870,7 +870,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _appendixService.InsertState(claim);
 
-                    _logger.Entity(claim, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(claim, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
                 }
                 else
                 {
@@ -885,7 +885,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _appendixService.UpdateState(state);
 
-                    _logger.Entity(state, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(state, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
 
                 return new JsonResult
@@ -895,7 +895,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Speicherung eines NT-Status.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Speicherung eines NT-Status.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -919,7 +919,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _appendixService.InsertCategory(claim);
 
-                    _logger.Entity(claim, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(claim, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
                 }
                 else
                 {
@@ -929,7 +929,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _appendixService.UpdateCategory(category);
 
-                    _logger.Entity(category, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(category, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
 
                 return new JsonResult
@@ -939,7 +939,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Löschung einer NT-Kategorie.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Löschung einer NT-Kategorie.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -975,11 +975,11 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                         if (state != null)
                             _appendixService.DeleteState(state);
 
-                        _logger.Entity(state, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
+                        _logger.Entity(state, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookiesOrSession());
                     }
                     catch (Exception ex)
                     {
-                        _logger.Error("Fehler bei Löschung eines NT-Status.", ex, _userHelper.FromCookies());
+                        _logger.Error("Fehler bei Löschung eines NT-Status.", ex, _userHelper.FromCookiesOrSession());
 
                         return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
                     }
@@ -1009,11 +1009,11 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                         if (category != null)
                             _appendixService.DeleteCategory(category);
 
-                        _logger.Entity(category, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
+                        _logger.Entity(category, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookiesOrSession());
                     }
                     catch (Exception ex)
                     {
-                        _logger.Error("Fehler bei Löschung einer NT-Kategorie.", ex, _userHelper.FromCookies());
+                        _logger.Error("Fehler bei Löschung einer NT-Kategorie.", ex, _userHelper.FromCookiesOrSession());
 
                         return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
                     }

+ 24 - 24
GreenTree.Nachtragsmanagement.Web/Controllers/DeviationController.cs

@@ -64,7 +64,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
         [FunctionAuthorize(true, "Deviation-Deviations")]
         public ActionResult ViewDeviations()
         {
-            var currentUser = _userHelper.FromCookies();
+            var currentUser = _userHelper.FromCookiesOrSession();
 
             var deviations = _deviationService.GetAllUserAssignedDeviations(currentUser);
             var deviationModels = deviations
@@ -103,7 +103,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
         /// <param name="scrollHeight">The height of the grid scrollable component.</param>
         public ActionResult PartialDeviations(string customFilters, int scrollHeight = -1)
         {
-            var currentUser = _userHelper.FromCookies();
+            var currentUser = _userHelper.FromCookiesOrSession();
 
             var deviations = _deviationService.GetAllUserAssignedDeviations(currentUser);
             var deviationModels = deviations
@@ -127,7 +127,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             if (String.IsNullOrEmpty(displayMode))
                 return new EmptyResult();
 
-            var currentUser = _userHelper.FromCookies();
+            var currentUser = _userHelper.FromCookiesOrSession();
 
             var deviations = _deviationService.GetAllUserAssignedDeviations(currentUser);
             var deviationModels = deviations
@@ -665,7 +665,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Zuweisung einer Vertragsabweichung zu einem Nachtrag.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Zuweisung einer Vertragsabweichung zu einem Nachtrag.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -705,7 +705,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _deviationService.InsertDeviation(deviation);
 
-                    _logger.Entity(deviation, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(deviation, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
                 }
                 else
                 {
@@ -726,7 +726,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _deviationService.UpdateDeviation(deviation);
 
-                    _logger.Entity(deviation, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(deviation, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
 
                 return new JsonResult
@@ -736,7 +736,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Speicherung einer Vertragsabweichung.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Speicherung einer Vertragsabweichung.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -756,7 +756,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                 if (deviation != null)
                     _deviationService.DeleteDeviation(deviation);
 
-                _logger.Entity(deviation, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
+                _logger.Entity(deviation, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookiesOrSession());
 
                 return new JsonResult
                 {
@@ -765,7 +765,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Löschung einer Vertragsabweichung.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Löschung einer Vertragsabweichung.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -905,7 +905,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _deviationService.InsertStatus(claim);
 
-                    _logger.Entity(claim, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(claim, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
                 }
                 else
                 {
@@ -918,7 +918,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _deviationService.UpdateStatus(claim);
 
-                    _logger.Entity(claim, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(claim, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
 
                 return new JsonResult
@@ -928,7 +928,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Speicherung eines VA-Status.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Speicherung eines VA-Status.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -952,7 +952,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _deviationService.InsertDisturbance(claim);
 
-                    _logger.Entity(claim, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(claim, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
                 }
                 else
                 {
@@ -962,7 +962,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _deviationService.UpdateDisturbance(disturbance);
 
-                    _logger.Entity(disturbance, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(disturbance, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
 
                 return new JsonResult
@@ -972,7 +972,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Speicherung einer VA-Kategorie.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Speicherung einer VA-Kategorie.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -1008,7 +1008,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _deviationService.InsertKind(claim);
 
-                    _logger.Entity(claim, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(claim, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
                 }
                 else
                 {
@@ -1019,7 +1019,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _deviationService.UpdateKind(kind);
 
-                    _logger.Entity(kind, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(kind, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
 
                 return new JsonResult
@@ -1029,7 +1029,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Speicherung einer Art.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Speicherung einer Art.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -1065,11 +1065,11 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                         if (status != null)
                             _deviationService.DeleteStatus(status);
 
-                        _logger.Entity(status, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
+                        _logger.Entity(status, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookiesOrSession());
                     }
                     catch (Exception ex)
                     {
-                        _logger.Error("Fehler bei Löschung eines VA-Status.", ex, _userHelper.FromCookies());
+                        _logger.Error("Fehler bei Löschung eines VA-Status.", ex, _userHelper.FromCookiesOrSession());
 
                         return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
                     }
@@ -1093,11 +1093,11 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                         if (kind != null)
                             _deviationService.DeleteKind(kind);
 
-                        _logger.Entity(kind, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
+                        _logger.Entity(kind, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookiesOrSession());
                     }
                     catch (Exception ex)
                     {
-                        _logger.Error("Fehler bei Löschung einer Art.", ex, _userHelper.FromCookies());
+                        _logger.Error("Fehler bei Löschung einer Art.", ex, _userHelper.FromCookiesOrSession());
 
                         return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
                     }
@@ -1127,11 +1127,11 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                         if (disturbance != null)
                             _deviationService.DeleteDisturbance(disturbance);
 
-                        _logger.Entity(disturbance, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
+                        _logger.Entity(disturbance, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookiesOrSession());
                     }
                     catch (Exception ex)
                     {
-                        _logger.Error("Fehler bei Löschung einer VA-Kategorie.", ex, _userHelper.FromCookies());
+                        _logger.Error("Fehler bei Löschung einer VA-Kategorie.", ex, _userHelper.FromCookiesOrSession());
 
                         return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
                     }

+ 7 - 7
GreenTree.Nachtragsmanagement.Web/Controllers/GlobalController.cs

@@ -49,7 +49,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
         /// </summary>
         public ActionResult Footer()
         {
-            var cookieUser = _userHelper.FromCookies();
+            var cookieUser = _userHelper.FromCookiesOrSession();
 
             if (cookieUser == null)
                 return View("~/Views/Shared/_Footer.cshtml", null);
@@ -89,16 +89,16 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                 if (roleId == -1)
                     return RedirectToAction("Index", "Home");
 
-                var user = _userHelper.FromCookies();
+                var user = _userHelper.FromCookiesOrSession();
                 var role = _userService.GetRoleById(roleId);
 
                 user.CurrentRole = role;
 
-                _userHelper.ToCookies(user);
+                _userHelper.ToCookiesAndSession(user);
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Wechsel einer Rolle.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Wechsel einer Rolle.", ex, _userHelper.FromCookiesOrSession());
             }
 
             return RedirectToAction("Index", "Home");
@@ -265,7 +265,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _appendixService.UpdateAppendix(appendix);
 
-                    _logger.Entity(appendix, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(appendix, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                     break;
                 case "deviation":
                     var deviation = _deviationService.GetDeviationById(model.EntityId);
@@ -274,7 +274,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _deviationService.UpdateDeviation(deviation);
 
-                    _logger.Entity(deviation, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(deviation, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                     break;
                 case "site":
                     var site = _siteService.GetSiteById(model.EntityId);
@@ -283,7 +283,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _siteService.UpdateSite(site);
 
-                    _logger.Entity(site, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(site, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                     break;
                 default:
                     return new EmptyResult();

+ 1 - 1
GreenTree.Nachtragsmanagement.Web/Controllers/HomeController.cs

@@ -43,7 +43,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
         // GET: Home
         public ActionResult Index()
         {
-            var cookieUser = _userHelper.FromCookies();
+            var cookieUser = _userHelper.FromCookiesOrSession();
             var dbUser = _userService.GetUserById(cookieUser.Id);
 
             if (dbUser == null) return new RedirectResult("~/login");

+ 4 - 4
GreenTree.Nachtragsmanagement.Web/Controllers/LoginController.cs

@@ -30,7 +30,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
         // GET: Login
         public ActionResult Index()
         {
-            var user = _userHelper.FromCookies();
+            var user = _userHelper.FromCookiesOrSession();
 
             if (user != null && user.Id != 0)
                 return RedirectToAction("Index", "Home");
@@ -64,9 +64,9 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                 user.CurrentRole = user.Roles.First(r1 => r1.Level == user.Roles.Max(r2 => r2.Level));
 
                 if (model.IsPermanent.HasValue && model.IsPermanent.Value)
-                    _userHelper.ToCookies(user, DateTime.Now.AddYears(1));
+                    _userHelper.ToCookiesAndSession(user, DateTime.Now.AddYears(1));
                 else
-                    _userHelper.ToCookies(user, DateTime.Now.AddHours(8));
+                    _userHelper.ToCookiesAndSession(user, DateTime.Now.AddHours(8));
 
                 _logger.Debug(
                     String.Format("Login für Benutzer \"{0}\" erfolgreich.", model.Username));
@@ -83,7 +83,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
         public ActionResult Logout()
         {
-            _userHelper.ClearCookie();
+            _userHelper.ClearCookieAndSession();
 
             return RedirectToAction("Index", "Login");
         }

+ 17 - 17
GreenTree.Nachtragsmanagement.Web/Controllers/MiscController.cs

@@ -203,7 +203,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _miscService.InsertMailNotification(mailNotification);
 
-                    _logger.Entity(mailNotification, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(mailNotification, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
                 }
                 else
                 {
@@ -217,7 +217,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _miscService.UpdateMailNotification(mailNotification);
 
-                    _logger.Entity(mailNotification, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(mailNotification, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
 
                 _notificationScheduler.Start();
@@ -229,7 +229,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Speicherung einer Mail-Benachrichtigung.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Speicherung einer Mail-Benachrichtigung.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -249,7 +249,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                 if (mailNotification != null)
                     _miscService.DeleteMailNotification(mailNotification);
 
-                _logger.Entity(mailNotification, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
+                _logger.Entity(mailNotification, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookiesOrSession());
 
                 return new JsonResult
                 {
@@ -258,7 +258,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Löschung einer Mail-Benachrichtigung.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Löschung einer Mail-Benachrichtigung.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -289,7 +289,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Ausführung einer Mail-Benachrichtigung.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Ausführung einer Mail-Benachrichtigung.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -361,7 +361,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             if (String.IsNullOrEmpty(displayMode))
                 return new EmptyResult();
 
-            var currentUser = _userHelper.FromCookies();
+            var currentUser = _userHelper.FromCookiesOrSession();
 
             var logs = _logger.GetAllLogs();
             var logModels = logs
@@ -474,7 +474,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Löschung eines Logs.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Löschung eines Logs.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -603,7 +603,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _configurationService.InsertConfigItem(configItem);
 
-                    _logger.Entity(configItem, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(configItem, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
                 }
                 else
                 {
@@ -632,7 +632,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _configurationService.UpdateConfigItem(configItem);
 
-                    _logger.Entity(configItem, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(configItem, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
 
                 _notificationScheduler.Start();
@@ -644,7 +644,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Speicherung einer Einstellung.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Speicherung einer Einstellung.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -664,7 +664,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                 if (configItem != null)
                     _configurationService.DeleteConfigItem(configItem);
 
-                _logger.Entity(configItem, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
+                _logger.Entity(configItem, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookiesOrSession());
 
                 return new JsonResult
                 {
@@ -673,7 +673,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Löschung einer Einstellung.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Löschung einer Einstellung.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -879,7 +879,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _miscService.InsertHelpPage(helpPage);
 
-                    _logger.Entity(helpPage, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(helpPage, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
 
                     return new JsonResult
                     {
@@ -897,7 +897,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _miscService.UpdateHelpPage(helpPage);
 
-                    _logger.Entity(helpPage, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(helpPage, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
 
                     return new JsonResult
                     {
@@ -907,7 +907,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Speicherung einer Hilfe-Seite.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Speicherung einer Hilfe-Seite.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -934,7 +934,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Löschung einer Hilfe-Seite.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Löschung einer Hilfe-Seite.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }

+ 14 - 14
GreenTree.Nachtragsmanagement.Web/Controllers/SiteController.cs

@@ -80,7 +80,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
         [FunctionAuthorize(true, "Site-Sites")]
         public ActionResult ViewSites()
         {
-            var currentUser = _userHelper.FromCookies();
+            var currentUser = _userHelper.FromCookiesOrSession();
 
             var sites = _siteService.GetAllUserAssignedSites(currentUser);
             var siteModels = sites
@@ -142,7 +142,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
         /// <param name="scrollHeight">The height of the grid scrollable component.</param>
         public ActionResult PartialSites(int scrollHeight = -1)
         {
-            var currentUser = _userHelper.FromCookies();
+            var currentUser = _userHelper.FromCookiesOrSession();
 
             var sites = _siteService.GetAllUserAssignedSites(currentUser);
             var siteModels = sites
@@ -163,7 +163,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             if (String.IsNullOrEmpty(displayMode))
                 return new EmptyResult();
 
-            var currentUser = _userHelper.FromCookies();
+            var currentUser = _userHelper.FromCookiesOrSession();
 
             var sites = _siteService.GetAllUserAssignedSites(currentUser);
             var siteModels = sites
@@ -366,7 +366,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _siteService.InsertSite(site);
 
-                    _logger.Entity(site, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(site, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
                 }
                 else
                 {
@@ -382,7 +382,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     _siteService.UpdateSite(site);
 
-                    _logger.Entity(site, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(site, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
 
                 return new JsonResult
@@ -392,7 +392,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Speicherung einer Baustelle.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Speicherung einer Baustelle.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -431,14 +431,14 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
                     siteId = site.Id;
 
-                    _logger.Entity(site, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookies());
+                    _logger.Entity(site, Core.Domain.Logging.LogEntityActivity.Insert, _userHelper.FromCookiesOrSession());
                 }
 
                 return EditSite(siteId);
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Speicherung einer Baustelle für einen Nachtrag.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Speicherung einer Baustelle für einen Nachtrag.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -458,7 +458,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                 if (site != null)
                     _siteService.DeleteSite(site);
 
-                _logger.Entity(site, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookies());
+                _logger.Entity(site, Core.Domain.Logging.LogEntityActivity.Delete, _userHelper.FromCookiesOrSession());
 
                 return new JsonResult
                 {
@@ -467,7 +467,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             }
             catch (Exception ex)
             {
-                _logger.Error("Fehler bei Löschung einer Baustelle.", ex, _userHelper.FromCookies());
+                _logger.Error("Fehler bei Löschung einer Baustelle.", ex, _userHelper.FromCookiesOrSession());
 
                 return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
             }
@@ -529,11 +529,11 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                     _siteService.UpdateSite(site);
                     _deviationService.UpdateDeviation(deviation);
 
-                    _logger.Entity(deviation, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(deviation, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
                 catch (Exception ex)
                 {
-                    _logger.Error("Fehler bei Zuweisung einer VA zu einer Baustelle.", ex, _userHelper.FromCookies());
+                    _logger.Error("Fehler bei Zuweisung einer VA zu einer Baustelle.", ex, _userHelper.FromCookiesOrSession());
 
                     return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
                 }
@@ -556,11 +556,11 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                     _appendixService.UpdateAppendix(appendix);
                     _deviationService.UpdateDeviation(deviation);
 
-                    _logger.Entity(deviation, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookies());
+                    _logger.Entity(deviation, Core.Domain.Logging.LogEntityActivity.Update, _userHelper.FromCookiesOrSession());
                 }
                 catch (Exception ex)
                 {
-                    _logger.Error("Fehler bei Zuweisung einer VA zu einem Nachtrag.", ex, _userHelper.FromCookies());
+                    _logger.Error("Fehler bei Zuweisung einer VA zu einem Nachtrag.", ex, _userHelper.FromCookiesOrSession());
 
                     return PartialView("~/Views/Shared/_PopupError.cshtml", ex);
                 }

+ 1 - 1
GreenTree.Nachtragsmanagement.Web/Extensions/MVCxGridViewGeneratorHelper.cs

@@ -546,7 +546,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
             private void InitPageFooter()
             {
                 var userHelper = Singleton<IContainer>.Instance.Resolve<IUserHelper>();
-                var user = userHelper.FromCookies();
+                var user = userHelper.FromCookiesOrSession();
 
                 report.Bands.Add(new BottomMarginBand
                 {

+ 2 - 2
GreenTree.Nachtragsmanagement.Web/Properties/AssemblyInfo.cs

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
 //
 // You can specify all the values or you can default the Revision and Build Numbers 
 // by using the '*' as shown below:
-[assembly: AssemblyVersion("0.9.0.0")]
-[assembly: AssemblyFileVersion("0.9.0.0")]
+[assembly: AssemblyVersion("0.9.0.1")]
+[assembly: AssemblyFileVersion("0.9.0.1")]

+ 1 - 0
GreenTree.Nachtragsmanagement.Web/Web.config

@@ -93,6 +93,7 @@
     </httpModules>
     <globalization culture="" uiCulture="" />
     <httpRuntime maxRequestLength="4096" requestValidationMode="4.0" executionTimeout="110" targetFramework="4.5.2" />
+    <sessionState timeout="120"  />
   </system.web>
   <system.webServer>
     <validation validateIntegratedModeConfiguration="false" />