初步掌握ASP.NET 2.0 Login控制項 – 角色管理

來源:互聯網
上載者:User
 

初步掌握ASP.NET 2.0 Login控制項 - 角色管理

作者:Ray
時間: 20074
http://www.cnblogs.com/Rayinuk/archive/2007/04/02/696711.html

總結一下角色管理方面的東西。

先給出MSDN有關Role Manager的文章,大家可以去看看:

http://msdn2.microsoft.com/en-us/library/ms998314.aspx


在最初的時候,我並沒有想著去使用VS的角色管理,而是想自己建立一套自己的角色管理機制,這樣可能會更靈活一些,但在後期,我還是改變了,處於學習的理由,我還是認為自己建立一套角色管理機制和許可權機制會更加靈活。。

類似於Profile, 我們仍需要在web.config啟動Role Manager。這裡插一句,其實我們可以在IIS中配置ASP.NET的屬性,包括我們一起所做的修改均可以介面化實現,其配製按預設儲存在WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\web.config ,大家可以先行設定,然後去該檔案察看。

在Web.config中配置如下:

<roleManager enabled="true" defaultProvider="SqlRoleManager">

      <providers>

        <add name="SqlRoleManager" 

             type="System.Web.Security.SqlRoleProvider"

             connectionStringName="LocalSQLServer"

             applicationName="FBHelper" />

      </providers>

</roleManager>

   
這裡要提到的是裡面的connectionStringName可設定為你當前web.config裡已定義的連接字串,不需要重建立立,applicationName則是你當前系統的名稱(解決方案名稱)。

 

Ok, 我們啟用了Role Manager後,可在前台進行相關的操作。但在此前,我們需要先定義角色。定義一個角色可以採取以下方法:

1) 利用Role Provider在前台代碼實現。如下:

using System.Web.Security; 

if (!Roles.RoleExists("TestRole")) 

 Roles.CreateRole("TestRole"); 

}

2) 在資料庫利用預存程序實現。利用aspnet_roles_createrole實現,如下:

EXEC aspnet_Roles_CreateRole 'ThisApplication', 'NewRole' 

EXEC aspnet_UsersInRoles_AddUsersToRoles 'ThisApplication', 'ThisUser', 'NewRole', 8 


所建立的Role將會儲存在aspnet_roles中,和aspnet_applications及aspnet_users中,這個稍後再提。

建立完角色後,我們可以在前台直接將使用者指派給一個角色。 比如我們現在需要在註冊完一個新使用者後,直接給使用者指派一個角色。正如上篇文章所講的,在添加使用者的地方(CreateUserWizard1_CreatedUser事件中),我們可以添加以下代碼來實現:

// 添加使用者實現代碼
 

//添加使用者至角色中

Roles.AddUserToRole(CreateUserWizard1.UserName, "Dept1"); 

 

上面的代碼中,我是Hard Code了 “Dept1 ”這個角色,這個應該是Role的名稱,主要根據自己項目中的設計來定了。

OK,現在我們可以檢查一下資料庫裡發生的情況。角色 的資料主要體現在3個表中,分別是:

       Aspnet_application

       Aspnet_users

       Aspnet_Roles

 我第一次查看的時候,aspnet_roles儲存的自然是我們所建立的Role的資訊,但是Role與使用者的關係體現在那裡呢?後來我看到了aspnet_user表中多出了一個相同使用者,但applicationID 和 UserID不同的資料,依此又查出在aspnet_application表中添加了一個新的application記錄,我才明白,對於一個角色和使用者的關係,系統將之定義為一個新的application,即看成一個新的機制,儲存於上述的表中,因此在aspnet_users表中雖然有兩條相同使用者資料的記錄,但是卻處於不同的application.

這是我目前對該機制的一個看法,不知道是不是正確的,還請知道的朋友確認一下。

 

也因此,在我們想要從aspnet_users表中擷取使用者資料的時候,需要加入相應的條件來進行篩選。但只是擷取自己系統使用者的時候使用,因為對於Role系統,前台我們可以利用.NET的Roles Manager來處理。當然前台的Membership Manager在進行使用者操作的時候,操作對象也是自動的指向了系統的使用者,而不是角色系統中的使用者。例如:刪除一個使用者時,表中的Role關係的使用者依然存在。出於這種情況,看來需要手工代碼來實現刪除使用者的同時,刪除角色與使用者的關係,以免資料庫出現垃圾資料。

 

最後一步就是看如何在前台利用Role Managers進行角色資訊的調用了。

這個很簡單,看看協助就都出來了,這裡就舉個例子,一看就明白了:

在Login控制項中設定好Destination,例如Default.aspx, 我們需要根據當前角色的不同,跳轉到不同的介面,那麼我們在Default.aspx的Page_Load中加入以下代碼可以實現:

 protected void Page_Load(object sender, EventArgs e)
    {
        lblMsgRole.Text = "您的角色是 " + Roles.GetRolesForUser(Profile.UserName)[0];

        Response.Write(@"<script   language='javascript'>alert('注意:10秒鐘後   頁面將自動跳轉到您的部門頁面!');</script>");

        if (Roles.GetRolesForUser(Profile.UserName)[0].Equals("Dept1"))
        {
            Response.Write(@"<script   language='javascript'>setTimeout('',10000);</script>");

            Response.Write("<meta   http-equiv='refresh'   content='10;URL=./dept1.aspx'>");//
        }
        else
        {
            Response.Write(@"<script   language='javascript'>setTimeout('',10000);</script>");

            Response.Write("<meta   http-equiv='refresh'   content='10;URL=./dept2.aspx'>");//

        }
    }

可以看到,我們可以利用Roles.GetRolesForUser(Profile.UserName)[0];來擷取當前登入使用者的角色資訊,在根據角色的內容來做相關的處理。 當然,這隻是Roles Manager中的其中一個簡單的應用,還有很多功能可以再從MSDN中擷取學習。

通過這兩章的內容,應該可以基本上將Login控制項應用於自己的系統,並將.NET預定義的資料庫和自己的資料庫連接起來,以縮短開發時間。其實我感覺一個Login控制項更像是一個學習控制項,一個體現Membership, Roles, Users應用的非常好的控制項,當然它也可以很好的應用與系統,但是個人總感覺在該控制項還不夠靈活,對於一些大中型項目還是自己建立要更好些。

呵呵,Login控制項還真是“想說愛你不容易啊”!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.