asp.net中基于角色的授权

时间:2014-07-16 17:26:01

标签: c# asp.net roles

我正在使用现有的网站。我目前正在为该网站开展基于角色的授权。我在web.config中提供了以下内容:

<system.web>
<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="Login.aspx" requireSSL="false" protection="All" slidingExpiration="true" path="/" timeout="240"  cookieless="UseDeviceProfile" enableCrossAppRedirects="false" />
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>

<location path="Admin">
<system.web>

  <authorization>
    <allow roles="Admin"/>

    <deny users="*"/>
  </authorization>

</system.web>
</location>

这就是我将用户添加到角色的方式:

if (!Roles.RoleExists(DropDownList1.SelectedValue))
{
Roles.CreateRole(DropDownList1.SelectedValue);
}
Roles.AddUserToRole(TextBox1.Text, DropDownList1.SelectedValue);

这就是我登录的方式:

if (Roles.IsUserInRole(TextBox1.Text,"Admin"))
{
//Code to validate password
Response.Redirect("./Admin/AdminHome.aspx");
}

但重定向不起作用。我只显示了admin的代码,还有其他角色。当我单击登录按钮时,URL会更改,就像登录无效并保留在登录页面上一样。如果我遗漏任何基于角色的授权,请提供帮助。

编辑:我重新编写了整个代码,代码在Respsonse.Redirect停止。是因为web.config的问题。为每个文件夹使用web.config会不会更好?

3 个答案:

答案 0 :(得分:2)

在您使用表单身份验证时手动登录用户。使用FormsAuthentication.SetAuthCookie().

示例:

string username = UsernameTB.Text;
FormsAuthentication.SetAuthCookie(username, false);

在他们重新登录后,您可以执行重定向到最初请求的页面或登录页面(取决于他们如何到达登录页面)。您可以使用Response.Redirect()。这将向客户端发送HTTP重定向,告诉他们请求不同的页面。一旦Response.Redirect()完成,当前执行以ThreadAbortException结束(这是正常的)。

答案 1 :(得分:0)

在重定向逻辑之前,可能需要添加以下行。

Response.BufferOutput = true;

How to: Redirect Users to Another Page

答案 2 :(得分:0)

我对此的工作不多。问题可能在于Response.Redirect()。此语法不会设置身份验证cookie,因此当它看到启用身份验证时会返回到身份验证页面。两种方法:

  1. 在身份验证标记中使用defaulturl并重定向到空白页面。在该页面加载该空页面时,基于角色重定向到不同的页面。
  2. 在重定向之前使用formsauthentication.setauthcookie(user,bool变量)。
  3. 感谢所有人的努力。