public static TokenItem LogIn(String login, String password, long appId)
        {
            // load user and check for user unexistence
            Actor currActor = ActorTools.Read(login);

            if (currActor == null)
            {
                return(null); // can't login unexistent user
            }
            // check for [id,appId] in use already
            long currActorId = currActor.Id;
            Guid?currToken   = _loadTokenValueByUserIdAndAppId(currActorId, appId);

            if (currToken != null) // [id,appId] already in use !!!
            {
                // we need to log out old working user before login new one
                // we log out when all values known now !!!
                _removeTokenValueByUserIdAndAppId(currActorId, appId);
                _removeTokenItemByToken(currToken);
            }

            // create TokenItem for new user
            Guid      newActionToken = Guid.NewGuid();
            Guid      refToken       = Guid.NewGuid();
            TokenItem newTokenItem   = new TokenItem(currActor.Id, appId, newActionToken, refToken);

            // save new TokenItem and new token in memory storage
            _saveTokenValueByUserIdAndAppId(currActor.Id, appId, newActionToken);
            _saveTokenItemByToken(newActionToken, newTokenItem);

            return(newTokenItem);
        }
        public static ActorRole Read(String login, Boolean WithActive = true, Boolean WithDeleted = false)
        {
            Actor     act    = ActorTools.Read(login, WithActive, WithDeleted);
            Role      rol    = RoleTools.Read(act.RoleId);
            ActorRole result = new ActorRole(act, rol);

            return(result);
        }
        public static List <ActorRole> Read(List <long> actorsIdsList, Boolean WithActive = true, Boolean WithDeleted = false)
        {
            if (actorsIdsList.Count > MaxListSize)
            {
                throw new Exception("Maximum list size is exceeded in ActorTools.Read(list) !");
            }

            List <Actor> actorsList   = ActorTools.Read(actorsIdsList, WithActive, WithDeleted);
            List <long>  rolesIdsList = actorsList.Select(x => x.RoleId).ToList();
            List <Role>  roles        = RoleTools.Read(rolesIdsList);

            List <ActorRole> result = new List <ActorRole>();

            foreach (Actor currActor in actorsList)
            {
                Role currRole = roles.Single(x => x.Id == currActor.RoleId);
                result.Add(new ActorRole(currActor, currRole));
            }

            return(result);
        }