Nano Hash - криптовалюты, майнинг, программирование

Заполнение выпадающего списка на основе нескольких ролей пользователей

Я пытаюсь заполнить DropDownList на основе ролей. У меня есть представление в SQL со значением и текстом каждого элемента в зависимости от роли пользователя (проверка подлинности Windows), и я могу заполнить DropDownList, если пользователь был во всех ролях:

 using (var db=new GPSE_2.DAL.GPSE2Entities())
            {
                var locations = (from loc in db.LocationLOBViews
                                orderby loc.LocationNumber
                                select new { loc.DataValue, loc.DataText});
                ddlShops.DataValueField = "DataValue" ;
                ddlShops.DataTextField = "DataText";
                ddlShops.DataSource = locations.ToList();
                DataBind();
            }

Я хотел бы добавить элементы, членом которых является только зарегистрированный пользователь. Пользователи могут состоять в нескольких группах (ролях).

Например, вошедший в систему пользователь находится в группе под названием Location 01 LOB 100, а также в группе под названием Location 01 LOB 200 и также в группе Location o2 LOB 100. Только эти параметры должны отображаться в файле DropDownList.

Мне удалось просмотреть роли, в которых находится пользователь, с помощью приведенного ниже кода.

string UPN = UserPrincipal.Current.UserPrincipalName.ToString();
                WindowsIdentity wi = new WindowsIdentity(UPN);
                string GroupName;
                foreach (IdentityReference group in wi.Groups)
                {
                    GroupName = group.Translate(typeof(NTAccount)).ToString();
                    if (GroupName.Contains("Location 01 LOB 100"))
                    {
                        var item = new ListItem
                        {
                            Text = "Location 01 LOB 100",
                            Value = "01,100"
                        };
                        ddlShops.Items.Add(item);
                    }
                }

Теперь я пытаюсь объединить 2, с которыми я столкнулся, добавив loc.DataValue и loc.DataText в DDL, если запрос возвращает результаты. Здесь я застрял, он добавляет строку в кавычки вместо значений.

using (var db = new GPSE_2.DAL.GPSE2Entities())
{
    string UPN = UserPrincipal.Current.UserPrincipalName.ToString();
    WindowsIdentity wi = new WindowsIdentity(UPN);
    string GroupName;
    foreach (IdentityReference group in wi.Groups)
    {
        GroupName = group.Translate(typeof(NTAccount)).ToString();
        var locations = (from loc in db.LocationLOBViews
                         where loc.DataValue.Contains(GroupName)
                         orderby loc.LocationNumber
                         select new { loc.DataValue, loc.DataText });
        if (locations !=null)
        {
            var item = new ListItem
            {
                Text = "DataText",
                Value = "DataValue"
            };
            ddlShops.Items.Add(item);

        }
    }
}

Спасибо,

-Дуг


  • Единственный способ получить информацию о роли — запросить активный каталог непосредственно для каждого пользователя. Вам, вероятно, лучше заранее узнать список ролей и отфильтровать его в зависимости от того, является ли пользователь его частью или нет, используя метод IsInRole, который вы показываете. 16.10.2018

Ответы:


1

Я заработал, создав список групп, в которых находится пользователь, а затем заполнив раскрывающийся список соответствующей информацией.

    private List<string> GetGroups()
    {
        string UPN = UserPrincipal.Current.UserPrincipalName.ToString();
        List<string> result = new List<string>();
        WindowsIdentity wi = new WindowsIdentity(UPN);
        foreach (IdentityReference group in wi.Groups)
        {

            string GroupName = group.Translate(typeof(NTAccount)).ToString();
            //if text location and lob is in the name add to results
            if (GroupName.Contains("Location") && GroupName.Contains("LOB"))
            {
                string DataValue1 = GroupName.Substring(GroupName.Length - 3);
                string DataValue2 = GroupName.Substring(GroupName.Length - 10, 2);
                string DataValue = DataValue2 + "," + DataValue1;
                result.Add(DataValue);
            }


        }
        result.Sort();
        return result;
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            using (var db = new GPSE2Entities())
            {
                for (int i = 0; i < GetGroups().ToArray().Length; i++)
                {
                    string DataValue = GetGroups().ToArray()[i].ToString();
                    var locations = (from loc in db.LocationLOBViews
                                     where loc.DataValue == DataValue
                                     orderby loc.LocationNumber
                                     select loc).FirstOrDefault();
                    if (locations != null)
                    {
                        var item = new ListItem
                         {
                             Text = locations.DataText,
                             Value = locations.DataValue
                         };
                        ddlShops.Items.Add(item);
                    }

                }

            }
            ddlShops.Items.Insert(0, "--Select Location and LOB--");
        }
    }
18.10.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..