/// <summary> /// LogOff the user. /// </summary> /// <param name="request">The device activation request.</param> /// <returns>The device activation response.</returns> private static NullResponse LogOffUser(UserLogOffRealtimeRequest request) { UserAuthenticationTransactionServiceDemoMode.ThrowIfInvalidLogonConfiguration(request.LogOnConfiguration); ICommercePrincipal principal = request.RequestContext.GetPrincipal(); if (string.IsNullOrEmpty(principal.UserId)) { throw new UserAuthenticationException(SecurityErrors.Microsoft_Dynamics_Commerce_Runtime_AuthenticationFailed, "User is not authenticated."); } string staffId = principal.UserId; if (!principal.IsTerminalAgnostic) { string terminalId = request.RequestContext.GetTerminal().TerminalId; UnlockUserAtLogOffDataRequest unlockUserDataRequest = new UnlockUserAtLogOffDataRequest( principal.ChannelId, terminalId, staffId, request.RequestContext.GetChannelConfiguration().InventLocationDataAreaId); bool unlocked = request.RequestContext.Execute <SingleEntityDataServiceResponse <bool> >(unlockUserDataRequest).Entity; if (!unlocked) { throw new UserAuthenticationException( SecurityErrors.Microsoft_Dynamics_Commerce_Runtime_AuthenticationFailed, string.Format("User {0} was not allowed to be unlocked from terminal {1}", principal.UserId, terminalId)); } } return(new NullResponse()); }
/// <summary> /// Unlock the current user. /// </summary> /// <param name="request">The data service request.</param> /// <returns>The data service response.</returns> private SingleEntityDataServiceResponse <bool> UnLockUserAtLogOff(UnlockUserAtLogOffDataRequest request) { ParameterSet parameters = new ParameterSet(); parameters[ChannelIdParamName] = request.ChannelId; parameters[StaffIdParamName] = request.StaffId; parameters[DataAreaIdParamName] = request.DataAreaId; ParameterSet outputParameters = new ParameterSet(); outputParameters[ReturnValueParamName] = 0; using (SqlServerDatabaseContext databaseContext = new SqlServerDatabaseContext(request)) { databaseContext.ExecuteStoredProcedureScalar(UnlockUserSprocName, parameters, outputParameters); } bool result = false; if ((int)outputParameters[ReturnValueParamName] == 1) { result = true; } EmployeeL2CacheDataStoreAccessor cacheAccessor = GetCacheAccessor(request.RequestContext); cacheAccessor.ClearCacheLockUserAtLogOn(request.TerminalId, request.StaffId); // unlocking the user has the same meaning as deleting the user session on the terminal cacheAccessor.ClearCacheIsEmployeeSessionOpenOnTerminal(request.TerminalId, request.StaffId); return(new SingleEntityDataServiceResponse <bool>(result)); }