根据我的 SQL 数据库中的用户角色和位置限制对 ASP.NET VB Web 窗体应用程序中的页面的访问?

问题描述

我正在使用 ASP.NET VB Web 表单应用程序。

我已在本地 sql Server 数据库中创建了用户登录凭据。

我想防止用户在没有正确角色/位置的情况下直接导航到页面,这可能吗?

我猜是一个页面加载事件,但我在哪里存储从一个页面到下一个页面用户身份验证凭据?

解决方法

好的,一般情况下是这样吗?

主页 - 也许有一个菜单栏等?好吧,您倾向于允许/让所有人进入该页面。

但是,假设您创建了一个名为 SalesGroup 的角色。如果您只希望拥有 SalesGroup 的用户使用该页面?

那么我强烈建议您创建(添加)一个新文件夹(比如销售)。

现在您可以在该文件夹中创建/添加尽可能多的 asp.net 页面。但您还只需将名为 web.config 的文件添加到该文件夹​​即可。

现在,任何用户 - 即使未登录,或者即使他们已登录?除非他们是给定角色的成员,否则他们无法使用或查看这些页面。 (在我们的示例 SalesGroup 中)。

所以我建议任何人都可以使用第一个主登录页面。或者将首页设为登录页面(因为每个人都必须能够使用此类页面)。

如上所述,为了保护一组页面,我们假设这些页面被放置在一个文件夹中(这将是一个子文件夹)。

然后您只需将 web.config 文件放入同一个文件夹中,您就会拥有:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>

    <authorization>
            <allow roles="SalesGroup" />
        <deny users="*" />
        </authorization>
    </system.web>
</configuration>

什么是真正好的: 如果用户尝试加载/使用/导航到该文件夹​​中的任何页面?如果他们没有登录,那么他们将被自动重定向到登录页面。真的很好,一旦他们登录,他们就会跳到有问题的网页。因此确保登录是 100% 自动的,但更好的是他们被要求登录安全页面,登录后,他们会自动重定向到他们试图使用的页面。

当然,在某些情况下,我可能会写一些代码。

例如,我有一些页面只要求用户登录,但我可以在代码中测试/检查角色。这提供了更好的控制和使用角色的能力。

所以,在页面加载事件中,你经常会看到这样的代码:

If Roles.IsUserInRole("Staff") then
   ' this is for staff members - jump to staff page
   response.redirect("~/Staff/StaffInfo.aspx
End if

因此,您可以根据它们的角色重定向、显示/隐藏显示内容。

但是,如上所述,如果没有任何代码,您至少可以在晚上高枕无忧,除非用户已登录并且他们具有您设置的角色,否则无法使用上述任何安全页面在网络配置中。

因此,在大多数情况下,基本页面(例如在网站的根目录中)不会受到保护。