/// <summary>
 /// Получить список баз на сервере ОЛАП
 /// </summary>
 public void LoadListDatabase()
 {
     foreach (Microsoft.AnalysisServices.Database asDB in ServerOLAP.Server.Databases)
     {
         mycOLAPdb db = new mycOLAPdb();
         db.DBolap = asDB;
         listDB.Add(db);
     }
 }
 /// <summary>
 /// Поиск и установка текущей базы по ее имени
 /// </summary>
 /// <param name="name"></param>
 /// <returns></returns>
 public mycOLAPdb dbSelect(string name)
 {
     _dbSelected = null;
     foreach (mycOLAPdb db in listDB)
     {
         if (db.Name == name)
         {
             _dbSelected = db;
             break;
         }
     }
     return(_dbSelected);
 }
        /// <summary>
        /// Для заданной роли получить всех пользователей
        /// Должно выполняться вместе в загрузкой всех ролей для БД
        /// </summary>
        /// <param name="dbRole"></param>
        private void LoadListUserFromRole(mycOLAPdb db, mycOLAProle dbRole, bool bForceLoad)
        {
            // получить всех юзеров для роли в кубе ОЛАП
            if (dbRole != null && (dbRole.listUser.Count == 0 || bForceLoad))
            {
                List <mycOLAPuser> _lstUser = new List <mycOLAPuser>();
                List <mycOLAProle> _lstRole = new List <mycOLAProle>();

                foreach (Microsoft.AnalysisServices.RoleMember mmbr in dbRole.OlapRole.Members)
                { // проходим по списку юзеров в каждой роли
                  // проверка полного списка пользователй
                  // пользователь может быть в разных ролях - ищем повторы
                  // если первый раз - добавить mmbr
                  // если нет то добавить в вписок роли а для db не надо, т.к. есть

                    mycOLAPuser usr = new mycOLAPuser(mmbr);
                    //добавить текущего пользователя в список для этой роли
                    if (dbRole.listUser.Find(u => (u.Name.ToUpper() == mmbr.Name.ToUpper())) == null)
                    {
                        dbRole.listUser.Add(usr);
                    }

                    ////Собрать полные списки ролей и пользователей
                    //_lstUser.Add(usr);
                    //_lstRole.Add(dbRole);

                    // составить список пользователей для всего куба - каждый юзер входит 1 раз
                    // Найти пользователя этого пользователя в списке по кубу
                    mycOLAPuser usrSearch = db.listUsers.Find(u => (u.Name.ToUpper() == mmbr.Name.ToUpper()));
                    if (usrSearch == null)
                    {
                        db.listUsers.Add(usr);
                    }
                    else
                    {
                        usr = usrSearch;
                    }

                    // составить список ролей для пользователя - 1 роли входит 1 раз
                    //if (!usr.listRoles.Contains<mycOLAProle>(dbRole))
                    if (usr.listRoles.Find(x => (x.Name.ToUpper() == dbRole.Name.ToUpper())) == null)
                    {
                        usr.listRoles.Add(dbRole);
                    }
                }
                //db.listUsers = _lstUser.Distinct<mycOLAPuser>().Select(a => a.Name).ToList<mycOLAPuser>();
                // UserList = UserList.Distinct().Select(a => a.Name).ToList();
            }
        }
        /// <summary>
        /// Получить для базы список всех ролей
        /// </summary>
        /// <param name="dbName"></param>
        public void LoadListRoleUserFromDB(string dbName, bool bForceLoad)
        {
            // Загрузка ролей и пользователей происходит 1 раз через обращение к базе
            // второй раз используется уже загруженный список
            // bForceLoad - если требуется еще раз перезагрузить списки из базы

            //Проверка наличия, что  база загружена
            _dbSelected = dbSelect(dbName);
            // получить все роли для базы и для каждой роли загрузить всех юзеров
            if (_dbSelected != null && (_dbSelected.listRole.Count == 0 || bForceLoad))
            {
                _dbSelected.listRole = new List <mycOLAProle>();

                foreach (Microsoft.AnalysisServices.Role dbRole in _dbSelected.DBolap.Roles)
                {
                    mycOLAProle roleSelected = new mycOLAProle();
                    roleSelected.OlapRole = dbRole;
                    roleSelected.DBname   = _dbSelected.Name;
                    _dbSelected.listRole.Add(roleSelected);
                    // Загрузить юзеров для этой роли
                    LoadListUserFromRole(_dbSelected, roleSelected, bForceLoad);
                }
            }
        }