2008-09-16 10 views
1

Ich verwende Mitgliedschaft und Rollen für die Authentifizierung in meiner vb .net-Anwendung. Wir haben ungefähr 5 Rollen in der Anwendung mit bestimmten Rollen, die einen spezifischen Profilwert ausfüllen. Beispiel ist die Rolle ist speichern und der Profilwert ist Filialnummer. Offensichtlich, wenn Sie für das Hauptquartier arbeiten, haben Sie keine Speichernummer, also interessiert mich das nicht. Jedes Geschäft kann auch mehr als einen Mitarbeiter haben.Grabbing Benutzer mit einem bestimmten Wert in ihrem Profil

Ich brauche die Benutzer für einen bestimmten Speichernummer zu erhalten. Das heißt, ich möchte nur, dass die Benutzer, die zur Geschäftsnummer 101 gehören, diese Liste anzeigen. Die Art und Weise, wie wir dies jetzt tun, durchläuft alle Benutzer und fügt die Benutzer, die die Kriterien erfüllen, in eine sortierte Liste ein. Dies funktioniert, aber das Problem ist, wenn Sie anfangen, etwa 3.000 Benutzer oder so zu übergeben. Es wird nur langsam, um etwas Gutes zu sein.

Wie würden Sie Jungs finden einen anderen Weg, es zu tun? Ich möchte wirklich keine gespeicherten Prozeduren erstellen oder die zugrunde liegenden Klassen ändern, da ich Angst davor habe, dass bei einer späteren Version von .net die Mitgliedschaft und die Rollen geändert werden.

Antwort

0

Sie mit dem eingebauten in Manager .NET Rolle, die eine SQL-Server-Instanz speichert ich es nehmen? In welchem ​​Format befindet sich Ihr Benutzerobjekt, wenn Sie es gerade ansehen, um die Kriterien zu bewerten? Wenn Sie ein Codebeispiel Post Ich habe eine Idee ...

1

Das ist wirklich das, was Sie in SQL filtern möchten. Ich glaube nicht, dass es einen Trick gibt, um einen linearen Scan Ihrer Daten durchzuführen und die gewünschten Ergebnisse zu erzielen.

Wenn dies in SQL zu tun ist keine Option, dann können Sie vielleicht eine zweite Liste erstellen vermeiden und nur sortieren Sie Ihre Hauptbenutzer-Array und haben die Anzeige nur diejenigen anzuzeigen, die Sie interessieren. Das würde die Speicherkopiezeit mindestens sparen.

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 

Das ist der Beispielcode, wie ich es mache. Der Grund, warum ich das nicht auf der SOL-Seite machen möchte, ist, dass ich eine große Abhängigkeit von der Tatsache habe, dass Mitgliedschaft und Rollen sich nicht ändern.