/// <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());
            }
示例#2
0
            /// <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));
            }