/// <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); } } }