【问题标题】:Include SELECT statement result in IF statement在 IF 语句中包含 SELECT 语句结果
【发布时间】:2013-10-18 20:07:09
【问题描述】:

我正在开发一个带有 Windows 身份验证的简单 ASP.NET Intranet。我正在使用 Active Directory 对用户进行身份验证以允许他们访问该站点,但我希望实施特定于站点的用户角色来管理页面和内容访问,而不会干扰或添加到现有的 Windows 用户组。

我对如何实现这一点的想法是创建一个UserRoles 表,并为每个用户在Users 表中放置一个特定的RoleId。然后我会将Currently Logged In 用户名与Users 表进行比较,以找出用户所在的角色。

问题 1:

这是解决这个问题的好方法吗?

问题 2(如果问题 1 的答案是肯定的):

如何为当前用户选择正确的 RoleId,并在 IF 语句中使用?

这就是我的想法:

var db = Database.Open("Database") ;

// Find out what my Windows Username is
var currentUser = Request.LogonUserIdentity.Name.Substring(Request.LogonUserIdentity.Name.LastIndexOf(@"\") + 1);

// Find out what Role I'm in    
var getUser = "SELECT RoleId FROM Users WHERE UserID = @0";

// Get the result
var selectedUser = db.Query(getUser, currentUser);

var requiredRole = "1";

// Choose where I should go
if (SelectedRoleId != requiredRole)
{
    Response.Redirect("~/AreaRestricted");
}

任何帮助都会很棒。

【问题讨论】:

    标签: asp.net asp.net-webpages user-roles


    【解决方案1】:

    ASP.NET 包含一个适应性很强的 RoleManager。不久前,我创建了一个自定义方法,就像您在这里使用的方法一样,然后我发现了 SqlRoleProvider,这太不可思议了。做你需要的一切,你可以使用或不使用 SqlMembershipProvider 来实现它。

    将此添加到 web.config 的 system.web 部分:

    <!-- Configure the Sql Role Provider -->
    <roleManager enabled="true" defaultProvider="SqlRoleProvider">
      <providers>
        <add name="SqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="QCmembership" applicationName="Quality_Training_2" />
      </providers>
    </roleManager>
    

    然后您可以使用内置命令添加新的自定义角色,并以相同的方式将用户添加到这些角色。它只需要用户名的字符串值或某种标识符。看起来像这样:

    Roles.AddUserToRole("anyUserName", "myCustomRole")
    

    更多信息(包括角色提供者的方法列表)可以在HERE 找到。

    【讨论】:

    • web.config 中有什么内容?谢谢。
    • @Jack 太奇怪了,我没有看到没有上传的代码。给我一秒钟
    • @Jack 你去。它实际上在那里,但我忘记将其格式化为代码,所以 Stack Overflow 没有显示它。
    • 如果我听起来很幼稚,我深表歉意,但是我需要为此在我的数据库中创建表还是自动创建它们?
    • @Jack 我认为他们使用由 SqlMembershipProvider 创建的表,但请检查链接以确定。
    【解决方案2】:

    问题 1: 不,这不是正确的方法。人们需要多个角色(无论您现在是否需要它们)。你应该有类似的东西:

    Users Table (you already have this)
    
    Roles Table
    [id] INT
    [description] VARCHAR(100)
    
    UserRoles Table
    [userId] INT --or whatever
    [roleId] INT
    

    问题 2:要管理角色,您需要实现 Custom Role Provider。其中,归结为两个步骤:

    1. 创建一个从 System.Web.Security 命名空间继承 RoleProvider 抽象类的类。在这里,您将拥有通过覆盖IsInRole 方法来检查用户是否处于角色中的功能。对于大多数用途(例如,如果您在其他地方处理添加和删除角色),这可能是您需要覆盖的少数功能之一。

    2. 告诉web.config 使用这个新的自定义角色提供程序。

    Sample Role-Provider

    然后您将能够简单地在User.IsInRole("roleName") 上执行If 以查看是否有人担任某个角色,而角色提供者会负责休息。

    【讨论】:

      猜你喜欢
      • 2012-07-30
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      相关资源
      最近更新 更多