一、前言
關于表單驗證,已經有不少的文章,相信Web開發人員也都基本寫過,最近在一個個人項目中剛好用到,在這里與大家分享一下。本來想從用戶注冊開始寫起,但發現東西比較多,涉及到界面、前端驗證、前端加密、后臺解密、用戶密碼Hash、權限驗證等等,文章寫起來可能會很長,所以這里主要介紹的是登錄驗證和權限控制部分,有興趣的朋友歡迎一起交流。
一般驗證方式有Windows驗證和表單驗證,web項目用得更多的是表單驗證。原理很簡單,簡單地說就是利用瀏覽器的cookie,將驗證令牌存儲在客戶端瀏覽器上,cookie每次會隨請求發送到服務器,服務器驗證這個令牌。通常一個系統的用戶會分為多種角色:匿名用戶、普通用戶和管理員;這里面又可以再細分,例如用戶可以是普通用戶或Vip用戶,管理員可以是普通管理員或超級管理員等。在項目中,我們有的頁面可能只允許管理員查看,有的只允許登錄用戶查看,這就是角色區分(Roles);某些特別情況下,有些頁面可能只允許叫“張三”名字的人查看,這就是用戶區分(Users)。
我們先看一下最后要實現的效果:
1.這是在Action級別的控制。
public class Home1Controller : Controller{ //匿名訪問 public ActionResult Index() { return View(); } //登錄用戶訪問 [RequestAuthorize] public ActionResult Index2() { return View(); } //登錄用戶,張三才能訪問 [RequestAuthorize(Users="張三")] public ActionResult Index3() { return View(); } //管理員訪問 [RequestAuthorize(Roles="Admin")] public ActionResult Index4() { return View(); }}2.這是在Controller級別的控制。當然,如果某個Action需要匿名訪問,也是允許的,因為控制級別上,Action優先級大于Controller。
//Controller級別的權限控制[RequestAuthorize(User="張三")]public class Home2Controller : Controller{ //登錄用戶訪問 public ActionResult Index() { return View(); } //允許匿名訪問 [AllowAnonymous] public ActionResult Index2() { return View(); }}3.Area級別的控制。有時候我們會把一些模塊做成分區,當然這里也可以在Area的Controller和Action進行標記。
從上面可以看到,我們需要在各個地方進行標記權限,如果把Roles和Users硬寫在程序中,不是很好的做法。我希望能更簡單一點,在配置文件進行說明。例如如下配置:
<?xml version="1.0" encoding="utf-8" ?><!-- 1.這里可以把權限控制轉移到配置文件,這樣就不用在程序中寫roles和users了 2.如果程序也寫了,那么將覆蓋配置文件的。 3.action級別的優先級 > controller級別 > Area級別 --><root> <!--area級別--> <area name="Admin"> <roles>Admin</roles> </area> <!--controller級別--> <controller name="Home2"> <user>張三</user> </controller> <!--action級別--> <controller name="Home1"> <action name="Inde3"> <users>張三</users> </action> <action name="Index4"> <roles>Admin</roles> </action> </controller></root>
新聞熱點
疑難解答
圖片精選