0

我正在使用 asp.net 表单身份验证、成员资格提供程序和角色提供程序。

你可以参考这篇文章

这篇文章帮助我根据用户的角色限制用户对 Web 应用程序特定区域的访问。

但是角色在 Web.config 文件中是硬编码的。

我需要从 asp.net 角色提供程序数据库中读取角色。

我想使用这个命令生成的数据库:[ C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regsql]

和以下工具:

替代文字

和 [ aspnetdb] 数据库。

而且我想用微软的框架,尽量避免自己定制。

请告诉我如何生成身份验证和授权票。如果你能给我看一些C#代码就更好了。

谁能帮我?

4

2 回答 2

1

如果您已经在您的站点中使用 SQL Server 连接了身份验证和成员资格,这对您来说将很容易。只需按照以下步骤操作:

在 sql server 上创建角色存储

   aspnet_regsql -S .\SQLExpress -E -A r

    -S specifies the server, which is (.\SQLExpress) in this example.
    -E specifies to use Windows authentication to connect to SQL Server.
    -A r specifies to add only the role provider feature.

为角色提供者添加连接字符串:

<connectionStrings>
  <add name="MyLocalSQLServer"
       connectionString="Initial Catalog=aspnetdb;
      data source=.\sqlexpress;Integrated Security=SSPI;" />
</connectionStrings>

添加角色管理器:

<system.web>
  <roleManager enabled="true" defaultProvider="MySqlRoleProvider" >
    <providers>
      <clear/>
      <add name="MySqlRoleProvider" connectionStringName="MyLocalSQLServer"
           applicationName="MyAppName"
           type="System.Web.Security.SqlRoleProvider" />
    </providers>
  </roleManager>
</system.web>    

现在你可以在你的页面中使用基于角色的东西(假设你已经启用了身份验证 [windows 或 forms])

测试 ASPX:

    All Defined Roles: <asp:Lable id="lblAllRoles" runat="server" /><br/>
    Your Roles: <asp:label id="lblMyRoles" runat="server" /><br/>

代码隐藏:

    protected void Page_Load(object sender, EventArgs e)
    {
        //here we are supposing that user is already authenticated

        StringBuilder sb=new StringBuilder();

        //gets roles for currently authenticated user
        var roles = Roles.GetRolesForUser();            

        foreach (var v in roles)
            sb.Append(", " + v);

        lblMyRoles.Text = sb.ToString();
        sb.Remove(0,sb.Length);

        string [] allRoles = Roles.GetAllRoles();
        foreach(var v in allRoles)
           sb.Append(", " + v);

        lblAllRoles.Text = sb.ToString();
    }

同样,您可以使用它Role.IsUserInRole("ROLE_NAME")来检查用户是否被分配了特定角色。

于 2009-09-06T17:45:18.447 回答
0

您可以使用标准登录用户控件对用户进行身份验证或手动执行此操作,请参阅ASP.NET Role Provider vs Membership Provider了解代码和说明。

于 2009-09-06T17:48:43.167 回答