在IF语句中包含SELECT语句结果

时间:2013-10-10 21:15:57

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

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

我对如何完成此操作的想法是创建一个UserRoles表,并为每个用户在RoleId表中放置一个特定的Users。然后我会将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");
}

任何帮助都会很棒。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

问题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使用这个新的自定义角色提供程序。

  3. Sample Role-Provider

    然后,您只需在User.IsInRole("roleName")上执行If即可查看是否有人担任某个角色,而角色提供商负责休息。