1

我在我的 vb .net 应用程序中使用成员身份和角色进行身份验证。我们在应用程序中有大约 5 个角色,其中某些角色填写特定的配置文件值。示例是角色是商店,配置文件值是商店编号。显然,如果您为总部工作,您没有商店编号,所以我不在乎。每个商店也可以有超过 1 名员工。

我需要获取特定商店编号的用户。这意味着我只希望属于商店编号 101 的用户显示该列表。我们现在这样做的方式是遍历所有用户并将符合条件的用户添加到排序列表中。这个功能,但问题是当你开始传递大约 3,000 个用户时。它只是变得缓慢。

你们会如何找到不同的方法呢?我真的不想做自定义存储过程或更改底层类,因为我担心这一切都会在更高版本的 .net 上中断,因为它们会更改成员资格和角色。

4

3 回答 3

1

这确实是您想要在 SQL 中过滤的东西。我认为没有任何技巧可以绕过对数据进行线性扫描并获得所需的结果。

如果在 SQL 中这样做不是一个选项,那么也许您可以避免创建第二个列表,而只需对您的主用户数组进行排序,并让显示器只显示您关心的那些。这样至少可以节省内存复制时间。

于 2008-09-16T19:25:10.423 回答
0

您使用的是内置的.NET 角色管理器,它保存到我接受的 SQL Server 实例中?当您当前查看用户对象以评估标准时,您的用户对象采用什么格式?如果您发布代码示例,我有一个想法......

于 2008-09-16T19:23:34.250 回答
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

那是我如何做的示例代码。我不想在 SOL 方面这样做的原因是,我会非常依赖成员资格和角色不会改变的事实。

于 2008-09-16T20:20:44.313 回答