国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

淺談ASP.NET的權(quán)限管理和用戶驗(yàn)證

2024-07-10 13:06:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

網(wǎng)站建設(shè)中,會(huì)碰到最常用的用戶管理及操作權(quán)限設(shè)置驗(yàn)證,雖然這是很常見(jiàn)的一個(gè)管理操作,但要做得完善很不容易。最近參考了許多.net方面的書,特別關(guān)心這方面的,并結(jié)合自己特點(diǎn),摸索了一下適合自己的用戶管理方法,完成了基本管理類庫(kù)。
  
  用戶的管理方法,在設(shè)計(jì)時(shí)采取“用戶——角色——許可”三級(jí),這是windows操作系統(tǒng)的用戶管理方法。一個(gè)用戶可以有多個(gè)角色,一個(gè)角色也可以有多個(gè)許可。
  
  所以有數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)分別設(shè)計(jì):
  
  用戶表:設(shè)userid、用戶名、用戶信息
  角色表:設(shè)roleid、categoryid、rolename、description
  用戶角色表:userid、roleid
  
  分類表:categoryid、categoryname、description
  許可表:permissionid、categoryid、permissionname、description
  角色許可表:roleid、permissionid
  
  設(shè)計(jì)好數(shù)據(jù)庫(kù)后,即可以從事設(shè)計(jì)用戶、角色、許可的類。類庫(kù)分?jǐn)?shù)據(jù)層類,完成建立、查詢、刪除、更新等操作。業(yè)務(wù)層的類,需要實(shí)現(xiàn)與數(shù)據(jù)無(wú)關(guān)功能,建立如用戶擁有角色、許可的列表,驗(yàn)證方式等。
  
  在業(yè)務(wù)層有一很重要的方法,即是用.net的驗(yàn)證方式來(lái)實(shí)現(xiàn),因此建立二個(gè)類:
  
  一是 siteidentity 類,它繼承自業(yè)務(wù)層基類,并采用system.security.principal.iidentity接口。該類主要存放用戶的基本信息,包括用戶名、email及id號(hào)、密碼。它的方法較簡(jiǎn)單,通過(guò)驗(yàn)證后,把用戶的基本信息。
  
  二是 helloseaprincipal 類,它也繼承業(yè)務(wù)基類,采用system.security.principal.iprincipal接口。該類的主要方法有驗(yàn)證類,并把驗(yàn)證后的用戶信息、用戶角色列表、許可列表存儲(chǔ)到類中。該類中有二個(gè)方法和一個(gè)property是iidentity接口必須的,即isinrole、haspermission,和system.security.principal.iidentity identity。
  
  設(shè)計(jì)完成類庫(kù)后,即可以用來(lái)驗(yàn)證用戶了。比如在管理登錄頁(yè)面中,需要判斷用戶的密碼是否正確,并判斷用戶是否有許可進(jìn)入管理頁(yè)面。
  
  下面是驗(yàn)證中的一段:
  
  helloseaprincipal admin = helloseaprincipal.validatelogin(txtadminname.text,                                   txtpassword.text);

      if (admin == null)      {

        labinfo.text = "沒(méi)有該管理員帳號(hào),或輸入密碼不正確。";

      }      else if ( !admin.haspermission(1) )      { 

       labinfo.text = "您并不是管理角色并且沒(méi)有管理許可,不能進(jìn)入本系統(tǒng)。";

      }      else      {

        context.user = admin;

        formsauthentication.setauthcookie(txtadminname.text, true);

        response.redirect("adminindex.aspx");

      }


  注:!admin.haspermission(1)的1是數(shù)據(jù)庫(kù)中許可的id號(hào)
  
  在內(nèi)部頁(yè)面中可以用:
  
  helloseaprincipal currentprincipal = (helloseaprincipal)context.user;

      if (!currentprincipal.haspermission(1))      {

      }
  這樣方法來(lái)驗(yàn)證用戶,雖然它也是通過(guò)cookie,但.net中的cookie是加密的,能實(shí)現(xiàn)很高的安全性

  這樣的設(shè)計(jì)還有個(gè)缺點(diǎn),即是許可的id號(hào)是固定值。考慮到一般的管理頁(yè)面需要的許可比較固定,所以采用把許可設(shè)置在config文件中。而一些頻道等需要經(jīng)常變化的驗(yàn)證許可放置在數(shù)據(jù)庫(kù)的頻道表中。下面是我采用的config文件中設(shè)置方法實(shí)現(xiàn),不詳細(xì)介紹如何讀取和寫入了。從config文件讀取和寫入可采用xml串行化和反串行化很容易實(shí)現(xiàn),可以用類來(lái)封裝,并且在使用時(shí)非常方便,下面的語(yǔ)句即是通過(guò)封裝類中讀取許可的方法:
  
  if ( !admin.haspermission(operatepermissionconfig.getsettings().managerlogin) ){}
  關(guān)于權(quán)限和驗(yàn)證,就介紹到這里,只能簡(jiǎn)單介紹了。因?qū)崿F(xiàn)的代碼非常長(zhǎng),所以這里只是介紹一種思維方式,具體實(shí)現(xiàn)每個(gè)人都會(huì)有自己特點(diǎn)。

 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 比如县| 裕民县| 富宁县| 英山县| 平顶山市| 龙川县| 梁河县| 县级市| 彭水| 湘乡市| 于都县| 定安县| 南江县| 噶尔县| 永福县| 新昌县| 淮北市| 平塘县| 义乌市| 白河县| 徐水县| 桐乡市| 晋中市| 凤阳县| 冕宁县| 芷江| 武冈市| 临颍县| 乐至县| 宕昌县| 全南县| 周宁县| 唐河县| 宣城市| 平乡县| 白沙| 嵩明县| 张家港市| 刚察县| 文水县| 金阳县|