2009-09-06 96 views
0

我正在使用asp.net表單身份驗證,成員資格提供程序和角色提供程序。ASP.NET Role,RolePrivider,ASP.net sql server安裝嚮導

你可以參考這個post

這篇文章幫助我限制用戶根據他們的角色訪問Web應用程序的特定區域。

但是這些角色在Web.config文件中被硬編碼。

我需要從asp.net角色提供程序數據庫中讀取角色。

我想使用由該命令所產生的數據庫: [C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regsql]

和下面的工具:

alt text

和[aspnetdb]數據庫。

我想使用微軟的框架,儘量避免我自己的定製。

Plz告訴我如何生成身份驗證和授權票證。更好,如果你能給我看一些C#的代碼。

任何人都可以幫助我嗎?

+1

@JMSA點擊下一步;) – 2009-09-06 16:08:35

+0

@Rex M,我已經創建了DB,編寫了Web.config文件,並且需要一些C#代碼來生成身份驗證票證。 – anonymous 2009-09-06 16:15:05

+0

@JMSA的';)'通常意味着這是一個笑話 – 2009-09-06 16:19:22

回答

1

如果您已經在您的站點中使用SQL Server連接了身份驗證和成員資格,那麼您將很容易。只要按照下列步驟操作:

<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>  

現在你可以

SQL服務器

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. 

添加連接字符串爲角色提供上創建角色存儲在你的頁面中使用基於角色的東西(假設你已經啓用了認證[窗口或表單])

測試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(); 
    } 

Simillarly可以使用Role.IsUserInRole("ROLE_NAME")檢查,如果用戶分配特定角色。

+0

@TheVillageIdiot,你可以告訴我,我通過在page_load事件中使用Role.IsUserInRole(「ROLE_NAME」)來檢查角色嗎?如果是的話,那麼你能告訴我其他的技巧嗎? – anonymous 2009-09-06 19:43:40

+0

說你的網站有一個頁面,只有ADMIN角色的用戶才能訪問,那麼你可以在page_load事件中使用這個方法** Role.IsUserInRole(「ADMIN」)**。如果你不想在** Page_Load **中測試,你可以將它移動到** OnPreInit **,如果用戶不在角色中,則重定向到另一個頁面。你也可以使用** User.IsInRole **函數。 – TheVillageIdiot 2009-09-06 20:37:20

+0

然後我可以從web.config文件中刪除角色信息。不是嗎? – anonymous 2009-09-06 20:58:42