2008-09-16 21 views
1

Vb .net uygulamasında kimlik doğrulama için üyelik ve rolleri kullanıyorum. Belirli bir profil değerini dolduran belirli rollerle uygulamada yaklaşık 5 rolümüz var. Örnek, rol deposudur ve profil değeri mağaza numarasıdır. Açıkçası, genel merkezde çalışıyorsanız, bir mağaza numaranız yok, bu yüzden umurumda değil. Her mağazada 1'den fazla çalışanı olabilir.Grabbing Kullanıcı profilinde belirli bir değeri kapar

Kullanıcıları belirli bir mağaza numarası için almalıyım. Anlamı sadece bu listeyi göstermek için 101 numaralı mağazaya ait olan kullanıcıları istiyorum. Bunu şu anda gerçekleştirdiğimiz yol tüm kullanıcılardan geçiyor ve kriterleri karşılayan kullanıcıları sıralı bir listeye ekliyor. Bu işlev, ancak yaklaşık 3.000 kullanıcıyı geçmeye başladığınızda sorun. Sadece herhangi bir iyi olmak için yavaş yavaş olur.

Bunu yapmayı farklı bir şekilde nasıl buldunuz? Özel saklı yordamı yapmak veya altta yatan sınıfları değiştirmek istemiyorum çünkü hepsinin .net'in üyeliğini ve rollerini değiştirdiği daha sonraki bir sürümünden korkuyorum.

cevap

0

Aldığım SQL Server örneğine kaydedilen yerleşik .NET rol yöneticisini kullanıyorsunuz? Şu anda ölçütleri değerlendirmek için onlara baktığınız zaman kullanıcılarınız hangi nesneyi kullanıyor? Bir kod örneği gönderirseniz bir fikrim var ...

1

Bu gerçekten SQL'de filtrelemek istediğiniz bir şeydir. Verilerinizi lineer bir şekilde taramak ve istediğiniz sonuçları almak için herhangi bir hile olduğunu sanmıyorum.

Eğer bunu SQL'de yapmak bir seçenek değilse, belki ikinci bir liste oluşturmaktan kaçınabilirsiniz ve sadece ana kullanıcı dizininizi sıralayabilir ve ekranın yalnızca sizin umursadığınızları göstermesini sağlayabilirsiniz. Bu bellek kopyalama süresini en azından koruyacaktı.

0
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 

Bunu nasıl yaptığımın örnek kodudur. SOL tarafında bunu yapmak istemememin sebebi, üyeliğin ve rollerin değişmemesine büyük ölçüde bağımlı olduğum.

İlgili konular