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

Restrict access to pages in an ASP.NET VB web forms application based on a user role and location from my SQL database?

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

我已经在我的本地 SQL 服务器数据库中创建了用户登录凭据。

我想阻止用户在没有适当的 role/location 的情况下直接导航到页面,这可能吗?

我猜是类似于页面加载事件,但是我应该在哪里存储用户从一个页面到下一个页面的验证凭据?

好的,这是一般的工作方式吗?

主页 - 也许带有菜单栏等?好吧,您倾向于 allow/let 每个人都进入该页面。

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

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

现在您可以 create/add 到该文件夹​​的 asp.net 个页面。但是您还只需将一个名为 web.config 的文件添加到该文件夹​​即可。

现在,任何用户 - 即使没有登录,或者即使他们已经登录?他们不能使用或查看这些页面,除非他们是给定角色的成员。 (在我们的示例销售组中)。

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

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

你只需将 web.config 文件放入同一个文件夹,你就会得到这个:

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

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

什么是真正的好: 如果用户尝试 load/use/navgate 到该文件夹​​中的任何页面?如果他们未登录,则他们将自动重定向到登录页面。真正好的是一旦他们登录,他们就会跳转到有问题的网页。所以登录的确保是 100% 自动的,但更好的是要求他们登录安全页面,并且在登录后,他们会自动重定向到他们试图使用的页面。

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

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

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

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

因此,您可以重定向,show/hide 根据他们的角色显示内容。

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

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