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

Community Server專題十:MemberRole之RoleMana

系統 1891 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條評論
主站蜘蛛池模板: 99热久久这里只有精品6 | 久99久视频| 天天色综合色 | 亚洲第九十七页 | 伊人精品视频在线 | 在线观看片成人免费视频 | 美女被cao的视频免费看 | 老外黑人欧美一级毛片 | 天堂成人av| 波多野结衣一区在线 | 免费福利影院 | 高清欧美色欧美综合网站 | 国产网址 | 免费看欧美日韩一区二区三区 | 亚洲成aⅴ人片在线观 | 亚洲精品一二三 | 久久大香伊蕉在人线国产昨爱 | 久草在现视频 | 色视频在线免费 | 日韩一区二区视频 | 在线观看日本一区 | 精品国产日韩亚洲一区在线 | 欧美福利视频在线观看 | 亚洲视频在线观看视频 | 天天干天天干天天干天天干天天干 | 免费一级毛片在级播放 | 九九影院理论片私人影院 | 免费看曰批女人爽的视频网址 | xxxx国产片| 久久免费观看视频 | 奇米影视四色狠狠888俺去啦 | 日韩欧美亚洲国产 | 福利色姬网站视频入口 | 四虎永久在线精品国产馆v视影院 | 欧美色亚洲图 | freexxxx性特大另类ww | 国产精品亚洲欧美 | 中文字幕精品1在线 | 亚州国产| 福利99| 玖玖草在线观看 |