亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Community Server專題十:MemberRole之RoleMana

系統 2137 0
?

Community Server 專題十: MemberRole RoleManager

由于最近忙于一些瑣事,近半個月都沒有寫新的專題,今天忙里抽閑趕緊補上,實在是抱歉。

?

設計做多了就會發現,用戶權限管理是一個永恒的話題,幾乎沒有什么項目不需要權限和角色管理的,可能會無數次去寫角色管理的代碼,而且會根據項目的不同粒度也會有所不同。在 CS 中,采用了 MemberRole.dll 中的 RoleManager 進行角色管理,該角色管理機制同樣在 asp.net 2.0 beta2 中得到應用。在分析代碼之前先看看數據庫中的角色的關系表: Community Server專題十:MemberRole之RoleManager

表分兩種前綴,一種是“ aspnet_ ”另一種是“ cs_ ”,“ aspnet_ ”是采用 MemberRole.dll 組件所必需的一些表,包括過程和視圖等都是這樣命名的,在 asp.net 2.0 beta2 中你也可以看到同樣的表、視圖與儲存過程。“ cs_ ”前綴是 CS 系統需要的表,由此可以看到 MemberRole.dll 中的 RoleManager 只管理到角色級別,通常我們還會給角色添加一些權限,然后在應用系統中判斷角色擁有的權限從而決定用戶是否有訪問的權限,當然一個用戶可以有多個角色,一個角色又可以有多個權限。有時你設計的某些系統是不需要做如此多權限管理的,只要多個角色就可以解決問題,那么就不再需要擴展數據庫,直接使用 MemberRole.dll 中的 RoleManager 就可以了。

注意:你可能會對 cs_SectionPermissions cs_ProductPermissions 表產生疑惑,這里有兩個權限表,分別管理兩種權限, cs_SectionPermissions 中存儲節點級別的權限,如 Blog 中,是否有權限開通 blog ,管理所有 blog 等,這些權限就放在 cs_SectionPermissions ,但是對于每個 blog ,如我的 blog ,現在不想要某個用戶訪問,或者需要某個用戶幫忙管理,再或者某個地方某些用戶可以訪問,某些不行,這樣的權限就放入 cs_ProductPermissions 中設置。

RoleManager 是一個 HttpModule ,由此可以在 web.config 中看到如下的配置文件:

?

< add? name ="RoleManager" ?type ="Microsoft.ScalableHosting.Security.RoleManagerModule,?MemberRole,?Version=1.0.0.0,?Culture=neutral,?PublicKeyToken=b7c773fb104e7562" ? />

?

這也是 RoleManager 角色管理的入口點,同時,在 RoleManager 中實現了 IConfigurationSectionHandler 接口,用來讀取 Web.config 中的以下配置:

????????

< roleManager?

??????????????
cacheRolesInCookie ="true" ?cookieName =".CSRoles" ?cookieTimeout ="90"

??????????????cookiePath
="/" ??cookieRequireSSL ="false" ?cookieSlidingExpiration ="true" ?

??????????????createPersistentCookie
="true" ?cookieProtection ="All" ?maxCachedResults ="1000" ? >

??????????????
< providers >

???????????????????
< add

???????????????????????
name ="CommunityServerSqlProvider"

???????????????????????type
="CommunityServer.Components.CSRoleProvider,?CommunityServer.Components"

???????????????????????connectionStringName
="SiteSqlServer"

???????????????????????applicationName
="dev"

???????????????????????description
="Stores?and?retrieves?roles?data?from?the?local?Microsoft?SQL?Server?database" ?

???????????????????
/>

??????????????
</ providers >

?????
</ roleManager > ?????

再這里我們又看到了 Provider 模型,其實 asp.net 2.0 beta2 中大量使用了這種數據訪問模型。它的優點我在前面的專題中已經講解過,不理解的朋友可以看我之前的專題。

RoleManager 很重要的一個類就是:

Community Server專題十:MemberRole之RoleManager 該類繼承至 IPrincipal ,因此我們可以在用戶登錄后通過檢查當前 Context User 的一些方法和屬性,判斷擁護是否擁有某角色。操作的方法在 RoleMangerModule 類下的 OnEnter 下:

OnEnter方法

由于知識點比較簡單, MSDN 上也有相關的 IPrincipal Identity 的介紹,我就不細細的分析。

RoleManger 里,很多地方使用了 Cookie ,這樣做提高了不少的效率,你想,如果每個用戶每次訪問一個頁面都去讀一次數據庫,把該訪問用戶的權限讀取出來,也許你聰明點,把該用戶的權限先緩存在內存中,并且設置一定的過期時間,其實你還能再聰明一點,那就是把角色保存在客戶端的 Cookie ,這樣連服務器的內存都節約了。只有在用戶第一次登錄,或者清除了 Cookie Cookie 失效的情況下才需要訪問數據庫。但是這也帶來一個問題,就是如果客戶端禁止使用 Cookie ,用戶將無法正常訪問。 CS 中通過在 web.config 中可以配置是否啟用這種機制。

?

到這里,整個 MemberRole.dll 算是粗略的講解了一遍,由于時間上的限制不可能滿足所有讀者的要求,如果有疑問可以 msn 我或者給我留言。后面一些專題我將說說 CS 的頁面,包括 MasterPage Theme Skin 等機制。

Community Server專題十:MemberRole之RoleManager


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 激情免费网站 | 久久网免费视频 | 人人爽天天碰天天躁夜夜躁 | 亚洲欧美一区在线 | 曰本女人性配视频 | 日韩欧美网 | 亚洲欧洲免费 | 久久性生大片免费观看性 | 日韩免费一区二区 | 午夜国产精品理论片久久影院 | 农村苗族一级特黄a大片 | 婷婷综合国产激情在线 | 日本特黄特色aaa大片免费欧 | 成人短视频在线免费观看 | 亚洲不卡视频在线 | 亚州精品一区二区三区 | 天天谢天天干 | 欧美激情免费看 | 一级黄色毛片子 | 一级毛片视频在线观看 | 91精品免费观看老司机 | 久久se精品一区二区国产 | 国产美女一级毛片 | 成人网欧美亚洲影视图片 | 99re66热这里只有精品17 | 亚洲欧美成人中文在线网站 | 一本伊大人香蕉高清在线观看 | 国产精品免费久久久久影院 | 看一级大片| 亚洲最大激情中文字幕 | 波多野结衣一区二区三区高清在线 | 国产激情 | 色拍自拍亚洲综合在线 | 久久草在线视频 | 亚洲精品mm1313久久 | 天天艹在线 | 综合亚洲欧美 | 天天做天天爰夜夜爽 | 五月婷婷色播 | 久久夜色视频 | 欧美福利影院 |