Захват пользователей с определенным значением в их профиле - PullRequest
1 голос
/ 16 сентября 2008

Я использую членство и роли для аутентификации в моем приложении vb .net. У нас есть около 5 ролей в приложении с определенными ролями, заполняющими определенное значение профиля. Пример - роль магазина, а значение профиля - номер магазина. Очевидно, что если вы работаете в штаб-квартире, у вас нет номера магазина, поэтому мне все равно. В каждом магазине может быть более 1 сотрудника.

Мне нужно получить пользователей для определенного номера магазина. Это означает, что я хотел бы, чтобы только пользователи, принадлежащие магазину № 101, отображали этот список. То, как мы делаем это сейчас, - это прохождение всех пользователей и добавление пользователей, которые соответствуют критериям, в отсортированный список. Это работает, но проблема в том, что вы начинаете передавать около 3000 пользователей или около того. Просто становится медленнее быть хорошим.

Как вы, ребята, нашли бы другой способ сделать это? Я действительно не хочу делать пользовательские хранимые процедуры или изменять базовые классы, потому что я боюсь, что все это нарушится в более поздней версии .net, что они изменяют членство и роли.

Ответы [ 3 ]

1 голос
/ 16 сентября 2008

Это действительно то, что вы хотите фильтровать в SQL. Я не думаю, что есть какая-то хитрость, чтобы обойти линейное сканирование ваших данных и получить желаемые результаты.

Если делать это в SQL не вариант, то, возможно, вы можете избежать создания второго списка и просто отсортировать свой основной пользовательский массив, и на дисплее будут отображаться только те, которые вам нужны. Это сэкономит как минимум время копирования памяти.

0 голосов
/ 17 сентября 2008
    Public Shared Function LoadALLUsersInRole(ByVal Code As Integer, ByVal Role As String) As ArrayList
        Dim pb As ProfileBase
        Dim usersArrayList As New ArrayList
        Dim i As Integer
        Dim AllUsersInRole() As String = Roles.GetUsersInRole(Role)

        For i = 0 To AllUsersInRole.Length - 1

            pb = ProfileBase.Create(AllUsersInRole(i), True)

            'Check to see if the current user in the collect belongs to this Store.
            If CType(pb.GetPropertyValue("Store.Code"), Integer) = Code Then                    
                    usersArrayList.Add(AllUsersInRole(i))                   
            End If
            pb = Nothing
        Next

        Return usersArrayList
    End Function

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

0 голосов
/ 16 сентября 2008

Вы используете встроенный диспетчер ролей .NET, который сохраняет в экземпляр SQL Server? В каком формате находятся ваши пользовательские объекты, когда вы в настоящее время смотрите на них, чтобы оценить критерии? Если вы отправите пример кода, у меня есть идея ...

...