【问题标题】:ASP.NET Role, RolePrivider, ASP.net sql server setup wizardASP.NET Role、RolePrivider、ASP.net sql server 设置向导
【发布时间】:2009-09-06 16:06:53
【问题描述】:

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

你可以参考这个post

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

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

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

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

以及以下工具:

和 [aspnetdb] 数据库。

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

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

谁能帮帮我?

【问题讨论】:

  • @Rex M,我已经创建了数据库,编写了 Web.config 文件,需要一些 C# 代码来生成身份验证票。
  • @JMSA ;) 通常意味着这是个笑话
  • 我知道。我现在很着急。

标签: asp.net roleprovider


【解决方案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>    

现在您可以在页面中使用基于角色的内容(假设您已经启用了身份验证 [窗口或表单])

测试 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") 来检查用户是否被分配了特定角色。

【讨论】:

  • @TheVillageIdiot,你能告诉我,我应该在 page_load 事件中使用 Role.IsUserInRole("ROLE_NAME") 来检查角色吗?如果是,那你能告诉我任何其他技术吗?
  • 说在您的网站上有一个页面,只有 ADMIN 角色的用户才能访问,然后您可以在 page_load 事件中使用此方法 Role.IsUserInRole("ADMIN")。如果您不想在 Page_Load 中进行测试,您可以将其移动到 OnPreInit 并且如果用户不在角色中,则重定向到另一个页面。您也可以使用 User.IsInRole 函数。
  • 然后我可以从 web.config 文件中删除角色信息。不是吗?
  • 我的意思是,除了在 Page_Load、OnPreinit 等中测试角色之外,我可以使用任何其他技术吗?任何自动化技术?
  • 不,你不能。那么角色提供者将不起作用。如果您打算使用自定义类来查询数据库 (aspnetdb) 以获取分配给用户和经理角色的角色,那么您可以从配置文件中删除内容。 Automated 方式是在 web.config 中定义不同目录和文件允许的角色,例如:
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2010-10-25
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多