許可權管理 how to control the authorization?

來源:互聯網
上載者:User

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層就無須在進行許可權的判斷。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.