1、使用ASP.Net內建的許可權管理
在web.config檔案中修改以下的內容:
<authentication mode="Forms">
<forms name=".ASPXUSERDEMO" loginUrl="login.aspx" protection="All" timeout="60" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
2.在login.aspx中如果使用者名稱和密碼正確則給予驗證:
FormsAuthentication.SetAuthCookie(TextBox_name.Text,false); //在本頁
FormsAuthentication.RedirectFromLoginPage(TextBox1.Text,false); //轉到操作頁
3.退出驗證:
FormsAuthentication.SignOut();
4.獲得目前使用者的名字:
User.Identity.Name;
評點:該方法非常簡單、便捷和易於管理,你只要將需要驗證頁面放在該檔案夾就可以了,但是該方法只能在做簡單的使用者管理時使用,因為它只有匿名使用者和非匿名使用者的劃分,不能對多級使用者進行劃分。
2、使用XML配置網站使用者權限
該方法是昨天那位面試官提的一種方法,就是在每個目錄下面建立一個XML許可權設定檔,當使用者需要訪問這個目錄的檔案時,通過讀取該XML檔案資訊來判斷該使用者是否有許可權訪問。
評點:本人認為該方法顯然不易於維護和管理,在檔案夾比較多且許可權組較多時,很容易造成混亂,而且在使用者訪問該檔案下任何一個檔案時都需要讀取XML檔案來判斷,那麼就需要在每個檔案中都加入許可權判斷操作的代碼。
3、使用資料庫標記方式
這也許是我們最常用到的方式,許多的大型系統都採用的這樣的做法,一般就建立一張許可權表,比如:
許可權組名稱(角色)
許可權
該表需要記錄多個許可權組,比如超級管理員、管理員、使用者等,每個許可權組設定不同的許可權,然後再將某使用者隸屬於該許可權組,甚至也可以在使用者表中對某使用者的許可權進行單獨設定,使用者權限從使用者組許可權繼承以外,然後還需包括自己的私人許可權。
評點:該方法的可擴充性很強,基本上可以完成所有許可權管理需要的操作,但是它也有不好的地方,那就是在使用者進行某項操作之前,你都需要在程式中加入許可權判斷的操作,才能返回“允許”或“拒絕”操作的指令,這樣顯然不易於管理,而且許可權的階層在程式中不清晰,維護也不方便。
4、使用URL參數+Controls層實現網站使用者權限
本方法其實是第3種方法的改進,將ASP.Net中Controls層結構與程式中的使用者權限層結構相結合,利用URL 參數標記欄位,當然也可以使用ViewState來標記,具體實現方法如下:
網站中只有一個.aspx頁,在頁中加入一個PlaceHolder控制項,然後在Page_Load中加入:
if (Action == null)
{
PlaceHolder1.Controls.Add(Page.LoadControl("./Controls/Default.ascx"));
}
else if (Action == "Manage")
PlaceHolder1.Controls.Add(Page.LoadControl("./Controls/Manage.ascx"));
}
else if (Action == "Help")
{
PlaceHolder1.Controls.Add(Page.LoadControl("./Controls/Help.ascx"));
}
... ...
用URL參數標記當前的使用者操作位置,然後顯示相應的內容,比如Manage.ascx中的內容只能管理員以上的使用者才能訪問,則在Manage.ascx的Page_Load中加一個許可權判斷目前使用者是否擁有存取權限,在M anage.ascx中有“使用者管理”、“地區管理”、“文章管理”等多個欄目,而只有超級管理員能進行“地區管理”。URL標記如下:
使用者管理:Default.Aspx?Action=Manage&Sort=User
文章管理:Default.Aspx?Action=Manage&Sort=Article
地區管理:Default.Aspx?Action=Manage&Sort=Area
需要在Manage.ascx中添加一個PlaceHolder控制項,判斷Sort參數顯示相應的Control內容,如下:
if (Sort=="User")
{
PlaceHolder1.Controls.Add(Page.LoadControl("./Controls/User.ascx"));
}
else if (Sort== "Article")
PlaceHolder1.Controls.Add(Page.LoadControl("./Controls/Article.ascx"));
}
else if (Sort== "Area")
{
PlaceHolder1.Controls.Add(Page.LoadControl("./Controls/Area.ascx"));
}
你只需要在“地區管理”的檔案中加入一個許可權判斷目前使用者是否為超級管理員。在“使用者管理”以及“文章管理”的檔案中就不需要判斷使用者權限。
評點:在Default層中允許所有使用者訪問,同時包括Help.ascx等,在Manage層只允許管理員以上的使用者訪問,而在Area層則只允許超級管理員訪問,使用該方法的優點就是無需在每一個頁面添加許可權判斷的操作,而是在一個Controls層添加一個許可權判斷的操作,而且許可權與程式的結構層次清晰,易於維護與管理,它不基於應用程式的目錄級,而是基於ASP.net的Controls層方式,比如需要進入Area層,就必須先進入Manage層,而User層就無須在進行許可權的判斷。