引言:本來園子里已經(jīng)有不少RBAC方面的文章了,而且自己的這個(gè)系統(tǒng)也參考了其中一些朋友的思想和創(chuàng)意,考慮是不是還有發(fā)表的必要。但感覺雖然是同樣的東西,由于每個(gè)人的出發(fā)點(diǎn)與目標(biāo)都不相同,所以做出來的東西也不會(huì)是一樣的。而且有些東西,我現(xiàn)在只是做出了架構(gòu)設(shè)計(jì),具體實(shí)現(xiàn)起來會(huì)不會(huì)很合適,也不太清楚。有園子里的弟兄們給提提建議,也是一件好事。是不是發(fā)在首頁,也考慮了一下,感覺這篇文章,拋開質(zhì)量不說,起碼從字?jǐn)?shù)上會(huì)對(duì)得起大家 。 正文部分 關(guān)于RBAC的基本理論,這里就不再多說了。 我是去年才接觸RBAC這個(gè)概念的,許多東西了解的并不透徹,而且由于幾年前就已經(jīng)熟練使用Windows活動(dòng)目錄的權(quán)限管理系統(tǒng)了,因此一些理念和正宗RBAC觀念會(huì)有一些出入,但應(yīng)該不會(huì)對(duì)RBAC的主旨產(chǎn)生太大的影響。如果您覺得我加入的一些東西是多余的,或者感覺不習(xí)慣,歡迎提出看法,我會(huì)根據(jù)情況進(jìn)行改進(jìn),謝謝。 其實(shí)開始并沒有編寫RBAC的想法,但是使用了微軟的membership后,感覺很不順手,兼容性、易用性、復(fù)用度等方面也感覺不適合自己。正好手上幾個(gè)項(xiàng)目都涉及到了較為復(fù)雜的用戶權(quán)限管理功能,因此年初決定用幾個(gè)月的時(shí)間來專門做一下這個(gè)項(xiàng)目,即通過這個(gè)過程進(jìn)行學(xué)習(xí),也減輕一下以后的工作量。 因此,我寫這篇文章也不是為了建立一個(gè)RBAC的范本,從理論上來供大家研討,而是一切從實(shí)際出發(fā),把我制作這個(gè)項(xiàng)目中的想法隨著項(xiàng)目的進(jìn)度寫出來,在這個(gè)過程中探討遇到的理論與技術(shù)點(diǎn)。 廢話說得太多了,轉(zhuǎn)入正題 要做RBAC,首先需要確定需求。開始是根據(jù)幾個(gè)項(xiàng)目來考慮它們的共同點(diǎn),看涉及到用戶管理、權(quán)限驗(yàn)證的部分,那些是幾個(gè)項(xiàng)目都需要實(shí)現(xiàn)的,哪些是某個(gè)項(xiàng)目所特有的,慢慢確立了RBAC的需求,決定了它要實(shí)現(xiàn)什么功能。 開始時(shí),只想將項(xiàng)目從數(shù)據(jù)庫建模開始,往上做到BLL這一層,然后其它項(xiàng)目可以使用此BLL,處理RBAC方面的工作,就相當(dāng)于把幾個(gè)項(xiàng)目的RBAC部分共享一樣。 后來感覺如果只做到這一層的話,以后復(fù)用的話,工作量還是會(huì)很大。所以決定將后臺(tái)管理部分的UI層也做出來。這樣就相當(dāng)于幾個(gè)項(xiàng)目連界面部分也可以共享了。 然而在實(shí)際過程中,覺得即使做出了后臺(tái)管理的UI。其它項(xiàng)目使用這個(gè)模塊也會(huì)比較費(fèi)事。而且這種模式,項(xiàng)目對(duì)RBAC的調(diào)用與調(diào)用項(xiàng)目?jī)?nèi)模塊沒什么區(qū)別。用戶在使用RBAC項(xiàng)目時(shí)還是需要了解其內(nèi)部的一些操作方法,耦合度太高,沒有實(shí)現(xiàn)封裝。 后來有了進(jìn)一步的想法,能不能將其做成一個(gè)框架。雖然水平有限,說框架有些大,而且也不見得能做完美,但目標(biāo)還是可以定得高一點(diǎn)么。 既然想做成框架,那就不是提供一個(gè)數(shù)據(jù)庫模型,并完成相關(guān)的代碼就了事的。我的想法就是,能夠讓用戶在用腳本建立建立數(shù)據(jù)庫,復(fù)制UI界面文件到項(xiàng)目文件夾,并引用dll后,無需再進(jìn)行其它的配置工作,就能直接使用這套框架。用戶自己編程進(jìn)行RBAC操作時(shí),只要一兩個(gè)類就可以完成所有工作,對(duì)用戶隱藏所有細(xì)節(jié)。 基于這種想法,我開始進(jìn)行項(xiàng)目的建設(shè),現(xiàn)在已經(jīng)建立了下面幾部分: (1)BLL:業(yè)務(wù)邏輯層。 用于處理業(yè)務(wù)邏輯相關(guān)的工作,此層內(nèi)容僅對(duì)RBAC項(xiàng)目?jī)?nèi)的成員開發(fā),不提供對(duì)外調(diào)用。 (2)ClassFactory:類工廠。 當(dāng)前僅支持?jǐn)?shù)據(jù)訪問層對(duì)象的創(chuàng)建。以后視需要增加新的工廠。 (3)Demo for WinForm:C/S模式界面模板 提供Windows程序的界面文件與操作代碼,如果不想自己設(shè)計(jì)界面,可以直接使用此現(xiàn)成的界面文件。 (4)Demo for WebForm:B/S模式界面模板 提供Web項(xiàng)目的界面文件與操作代碼。如果不想自己設(shè)計(jì)Web界面,可以直接使用此界面。否則只要制作新的CSS文件,替換原有css文件,即可實(shí)現(xiàn)自己的界面。 (5)IDAL:數(shù)據(jù)庫訪問層接口定義 沒什么好說的 (6)Model:實(shí)體類 同樣 (7)OracleDAL:Oracle 數(shù)據(jù)庫訪問層 支持Oracle數(shù)據(jù)庫,這個(gè)準(zhǔn)備先放一放,Oracle編程太不爽了 (8)Privilege Config Tools:權(quán)限配置工具 Windows程序,其它項(xiàng)目在使用此框架時(shí),需要生成自己的的權(quán)限文件。這個(gè)工具就是用來做這件事情的。 (9)RBAC Manager:RABC管理類 這個(gè)是對(duì)外服務(wù)的部分,其它項(xiàng)目只要直接引用此dll,即可進(jìn)行涉及到RBAC的各種操作。 (10)SQLServerDAL:SQL Server 數(shù)據(jù)庫訪問層 支持SQL Server數(shù)據(jù)庫。也沒什么好說的。 現(xiàn)在大家可以看出來了,作為最終用戶,如果在項(xiàng)目中使用這個(gè)框架的話,那么他所要關(guān)心的只是RBAC Manger這一個(gè)namespace下的類的使用,而無需關(guān)住RBAC的細(xì)節(jié)。 項(xiàng)目組件說完了,再來介紹一下數(shù)據(jù)庫建模 說明一下,為了保證大家都能看清楚圖片,所以我把圖片存得大了些,右邊的幾個(gè)表看不見,大家費(fèi)點(diǎn)事另存到桌面上再看吧。 數(shù)據(jù)庫建模圖: ![]() 說一下各表的用途 所有表均以ksRBAC開頭,避免與其它項(xiàng)目表重名。 (1)用戶部分 ksRBAC_Users:用戶基本表。此表僅存儲(chǔ)最少量的用戶信息,用于用戶登陸、權(quán)限認(rèn)證等常見的工作。 ksRBAC_UserMembership:用戶權(quán)限表。此表用來存儲(chǔ)涉及到權(quán)限系統(tǒng)工作的想關(guān)信息。 ksRBAC_UserDetail:用戶基本信息表。用于存儲(chǔ)用戶的日常信息。只在查看用戶資料時(shí)需要調(diào)用。 其實(shí)這個(gè)三表的內(nèi)容完全可以放到一張表中,但感覺分到三個(gè)表里,在編程上會(huì)清晰一些。這里可能有不合理的地方,還望大家指正。 (2)權(quán)限部分 ksRBAC_ResourceGroups:資源分組。用于將同類資源進(jìn)行分組,以方便管理,支持多級(jí)分類。 ksRBAC_Resources:資源。記錄具體的資源對(duì)象。 ksRBAC_Operations:操作。記錄具體的操作方法。 ksRBAC_Privileges:權(quán)限表。通過結(jié)成“資源-操作”對(duì),來實(shí)現(xiàn)權(quán)限的定制。 (3)角色部分 ksRBAC_Roles:角色表。存儲(chǔ)所有角色。 ksRBAC_PrivilegeInRoles:用戶表,用于存儲(chǔ)與身份驗(yàn)證有關(guān)的信息 ksRBAC_UsersInRoles:用戶所屬角色表。通過此表來設(shè)定用戶具有那個(gè)角色的權(quán)限。 (4)分組部分 ksRBAC_Groups:分組表。存儲(chǔ)分組相關(guān)信息 ksRBAC_GroupsInGroups:組屬組表。設(shè)置分組所屬的分組。 ksRBAC_GroupEstates:組狀態(tài)類型表。 ksRBAC_UsersInGroups:組屬用戶表。設(shè)置用戶所屬組。 ksRBAC_UserInGroupEstates:組用戶狀態(tài)類型表。用于記錄組中用戶的狀態(tài)。 (5)日志部分 這部分的內(nèi)容還沒有做完,因?yàn)楝F(xiàn)在還沒有進(jìn)展到涉及日志的操作,所以不能決定到底需要什么東西。 ksRBAC_UserLog:用戶日志。用于記錄用戶操作 對(duì)于用戶、權(quán)限、角色三部分的表,大家應(yīng)該都沒有什么疑問,稍微有些理解上的差異也也該是設(shè)計(jì)習(xí)慣不同造成的。感覺主要會(huì)在分組這一塊有不同的理解。看了一些相關(guān)文章,也有涉及到分組設(shè)計(jì)的,但這些設(shè)計(jì)從功能上來講相差甚遠(yuǎn)。有的是將分組與角色關(guān)聯(lián),相當(dāng)于做了一個(gè)RoleGroups表,這種分組起到了分類角色的作用。有的是將分組作為一個(gè)組織結(jié)構(gòu)架構(gòu)來做,然后再與用戶關(guān)聯(lián),這種分組起到了分類用戶的作用。本項(xiàng)目中的分組,是與用戶相關(guān)的,而與角色無關(guān),它實(shí)現(xiàn)的是用戶分類的功能。但分組在這里并不僅僅起到一個(gè)分類用戶的功能,還有一個(gè)重要的功能,但因?yàn)槊窟M(jìn)行具體的代碼編寫,所以現(xiàn)在還不好說,我會(huì)在完善以后寫出來的。 本來還有許多想寫的,但是剛開始感覺思路上不是特別清晰,有些無從下筆,一些東西也不清楚是不是有必要說,就此打住吧??纯创蠹曳答仯?zèng)Q定需要寫些什么內(nèi)容吧。歡迎大家拍磚。 第一篇文章,其實(shí)并沒有涉及到具體的技術(shù)細(xì)節(jié),只是從整體上俯瞰一下這個(gè)項(xiàng)目。如果您沒有用過RBAC,肯定會(huì)感覺到有些不知所云。以后我會(huì)在涉及到細(xì)節(jié)的地方詳細(xì)講解的。 |
|
|