1+1=2,0+0=0

          日月累積
          posts - 7, comments - 50, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          最近項(xiàng)目的項(xiàng)目很奇怪,一個(gè)大項(xiàng)目(系統(tǒng))里包含了很多小的子系統(tǒng),而這些子系統(tǒng)中都有權(quán)限控制的部分,這件事情挺讓我頭痛的,記得一年前在沈陽(yáng),我曾經(jīng)有一段時(shí)間也因因這個(gè)問題而疲于奔命,為什么說(shuō)疲于奔命呢?由于當(dāng)時(shí)項(xiàng)目進(jìn)度不允許,導(dǎo)致最終系統(tǒng)權(quán)限模塊草草了事,每個(gè)模塊都是由讀權(quán)限字符串來(lái)控制用戶ACL,當(dāng)用戶無(wú)法訪問時(shí),提示權(quán)限不夠。這么做對(duì)用戶是很不負(fù)責(zé)任的,既然讓用戶看到了操作的方式和界面,為什么又告訴用戶沒有權(quán)限呢?我開始懷疑我們是否應(yīng)該在底層就封殺用戶的訪問權(quán)限。

          現(xiàn)在項(xiàng)目開展起來(lái)了,雖然目前我已經(jīng)有了對(duì)權(quán)限控制的一套方案,并且實(shí)施成了我的可重用框架代碼,雖然目前的權(quán)限也是基于眾星捧月的AOP思想,但我至今對(duì)權(quán)限設(shè)計(jì)仍有兩個(gè)疑惑:

          疑惑一:很多同行提出方案,想要在底層就截取用戶權(quán)限,控制用戶對(duì)方法或者類的訪問。這樣做的好處在于可以將系統(tǒng)功能與業(yè)務(wù)邏輯松散耦合,并且實(shí)現(xiàn)簡(jiǎn)單,結(jié)構(gòu)清晰,三兩個(gè)advisor、filter,或者acegi就能搞定,但在web程序中體現(xiàn)出了他的劣勢(shì),當(dāng)我們將用戶的訪問拒絕在業(yè)務(wù)邏輯之外的時(shí)候,我們此時(shí)是否應(yīng)該拋出異常提示用戶?一旦提示用戶沒有相應(yīng)的權(quán)限,我認(rèn)為對(duì)于用戶來(lái)說(shuō),這就不是一個(gè)perfect practice。由此得出,我們根本就不應(yīng)該讓用戶做此次操作,而控制用戶操作的源頭就是界面,也就是說(shuō),在界面上我們就應(yīng)該對(duì)用戶的權(quán)限元素(如添加按鈕、功能菜單等)進(jìn)行控制。此時(shí),一對(duì)矛盾出現(xiàn)了,要控制界面上形形色色的元素只有兩種辦法,一,將權(quán)限與你的界面結(jié)合起來(lái)設(shè)計(jì),這將違背AOP的思想,也使得系統(tǒng)控制模塊的重用性大大下降,二,我們借鑒primeton的想法,將權(quán)限控制的理念抽取出來(lái),單獨(dú)做成一套權(quán)限系統(tǒng),解決你所有的需要權(quán)限控制的系統(tǒng)需求,這樣也有令人頭痛的問題,你的所有想用它來(lái)控制權(quán)限的系統(tǒng),必須界面上統(tǒng)一風(fēng)格。或許這樣的方式對(duì)商業(yè)web系統(tǒng)是合適的,畢竟需要你大刀闊斧個(gè)性化的地方不多,但我們卻很難保證在未來(lái)幾年內(nèi)商業(yè)web系統(tǒng)的風(fēng)格不改變。再者,開發(fā)這么一個(gè)系統(tǒng)也不是一蹴而就的事,在這個(gè)問題上一直讓我困惑不已。


          疑惑二:大多應(yīng)用的權(quán)限判定是基于權(quán)限字符串的,但存儲(chǔ)在數(shù)據(jù)庫(kù)中的權(quán)限字符串能夠判定的權(quán)限并不多,在我們這次項(xiàng)目中,我引用了基于二進(jìn)制的8421權(quán)限判定法則,我深深的感覺到權(quán)限字符串的弱勢(shì),這使我想起了中國(guó)古老一套數(shù)學(xué)理論-“盈不足術(shù)”,超遞增序列的魅力在我眼前滑過(guò),

          首先我來(lái)解釋一下盈余不足理論:有十只盒子,第一個(gè)盒子里放一個(gè)盤子,第二個(gè)盒子里放兩只,第三個(gè)盒子里放四只,第四個(gè)盒子里放八只……第九個(gè)盒子里放256只,第十個(gè)盒子放512只,即第N只箱子里放2^(N-1)只盤子,一共1023只。那么命題如下:在1023這個(gè)數(shù)字之內(nèi),任何一個(gè)數(shù)目都可以由這十只盒子里的幾只組合相加而成。那么1、2、4、8、16、32、64、128、256、512這個(gè)序列為什么有這么個(gè)魔力?這個(gè)數(shù)列的特點(diǎn):1、每項(xiàng)是后一項(xiàng)的二倍,2、每項(xiàng)都比前面所有項(xiàng)的和大,而且大1。這個(gè)1就是關(guān)鍵,就因?yàn)檫@個(gè)1,它才可以按1遞增,拼出總和之內(nèi)任意一個(gè)整數(shù)。這個(gè)序列叫做超遞增序列,它是解決背包問題的基礎(chǔ)。3、拼出總和之內(nèi)任意一個(gè)整數(shù)可以由這個(gè)序列中的一些數(shù)構(gòu)成,且構(gòu)成方法唯一,據(jù)說(shuō)是密碼學(xué)中的NP定理。譬如說(shuō)這個(gè)數(shù)列總合中20這個(gè)數(shù),只能由16+4一種方法構(gòu)成,由此延伸出來(lái),如果綜合中這個(gè)數(shù)據(jù)代表一個(gè)權(quán)值,我們可以解出它的所有構(gòu)成參數(shù)(操作),如20這個(gè)數(shù)據(jù),我們可以挨個(gè)和序列中每一項(xiàng)按位與,得出來(lái)如果不等于0,就說(shuō)明他是由這個(gè)數(shù)構(gòu)成的。

          保存權(quán)值到int還是varchar對(duì)于我們來(lái)說(shuō)是個(gè)問題,當(dāng)然,保存字符串的好處是運(yùn)算壓力小。我們可能聽過(guò)一個(gè)故事,就是把這個(gè)超遞增序列延伸到第64項(xiàng),就是那個(gè)術(shù)士和皇帝在國(guó)際象棋棋盤上要米粒的傳說(shuō)。64項(xiàng)的和是一個(gè)天文數(shù)字!但計(jì)算機(jī)本身就是一個(gè)只認(rèn)識(shí)二進(jìn)制的機(jī)器!很多程序員整天只關(guān)心架構(gòu),甚至不知道或者不關(guān)心位操作是什么玩意,當(dāng)然我們有朋友擔(dān)心數(shù)據(jù)庫(kù)的int不夠長(zhǎng),那么既然可以保存一個(gè)只有0、1組成的varchar字符串,為什么不能保存一個(gè)十六進(jìn)制的字符串,有人規(guī)定varchar只能保存01嗎?十六進(jìn)制串的長(zhǎng)度正好是二進(jìn)制的四分之一。

          由此我們可以無(wú)限制的擴(kuò)展權(quán)值操作。

          在最近的項(xiàng)目里,我對(duì)權(quán)限的控制分成兩個(gè)部分,第一就是用戶體驗(yàn)上,我設(shè)置了一個(gè)權(quán)限標(biāo)簽,從數(shù)據(jù)庫(kù)中抽取權(quán)限信息,然后做到標(biāo)簽里,也湊或算成是界面AOP了,第二就是底層的攔截,用了Spring 的AOP,為的是防止權(quán)限沖突,雙管齊下。暫時(shí)解決權(quán)限所需,另外在算法上我用了16進(jìn)制的權(quán)限判別代碼,雖然配置較麻煩,寫完代碼還要寫文檔說(shuō)明,不過(guò)也解決了權(quán)限繁雜又多的問題,暫時(shí)就這樣了,嘿嘿,以后有空再研究。


          評(píng)論

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二  回復(fù)  更多評(píng)論   

          2007-01-02 13:39 by ant
          如能結(jié)合些代碼談?wù)劊选:梦模P(guān)注!

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二  回復(fù)  更多評(píng)論   

          2007-01-02 14:29 by BeanSoft
          贊一個(gè)!

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二  回復(fù)  更多評(píng)論   

          2007-01-02 14:31 by 綠色使者
          其實(shí)上面用二進(jìn)制一下子就解釋清楚了,1,2,4,8就是二進(jìn)制的基,每一個(gè)十進(jìn)制數(shù)當(dāng)然可以用唯一的這些二進(jìn)制基表示出來(lái)啦

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二  回復(fù)  更多評(píng)論   

          2007-01-02 21:55 by jerson[匿名]
          字也太小了吧

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二  回復(fù)  更多評(píng)論   

          2007-01-02 22:22 by 海思
          是否可以把16進(jìn)制的權(quán)限判別代碼的相關(guān)代碼和文檔發(fā)份給我看看呢?
          我最近也在研究權(quán)限部分,由于對(duì)這塊不熟,比較頭痛,謝謝
          如果可以的話麻煩發(fā)份到我郵箱
          chmk35@163.com
          謝謝

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)  回復(fù)  更多評(píng)論   

          2007-01-02 22:44 by 江上一葉舟
          首先對(duì)大家的關(guān)注表示感謝^_^
          另外由于我不會(huì)在評(píng)論信息中加載代碼,所以我將本文中的標(biāo)題后面加上了(1),我將在我隨后的幾篇隨筆中分別談一下我的權(quán)限分配的相關(guān)數(shù)據(jù)庫(kù)設(shè)計(jì)、數(shù)據(jù)庫(kù)與權(quán)限關(guān)聯(lián)配置、界面權(quán)限控制和底層攔截機(jī)制,小文確是拋磚引玉,謝謝關(guān)注~~:)

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)  回復(fù)  更多評(píng)論   

          2007-01-02 23:04 by errorfun[匿名]
          嗯,不錯(cuò),和我做的第一個(gè)項(xiàng)目時(shí)的想法一樣,權(quán)限系統(tǒng)也用了這個(gè)8421的方式實(shí)現(xiàn),沒有權(quán)限的人就看不到菜單,看不到操作。這樣處理也是我覺得比較方便的做法了。不過(guò)后來(lái)是用了四個(gè)字段分別表示增刪改查這四個(gè)方法,1表示有權(quán)限,0表示沒權(quán)限。
          當(dāng)時(shí)也是想了很多方案后才決定了,因?yàn)閷?duì)于數(shù)據(jù)操作不外四種方式:查看,增加,修改,刪除。查詢,分析,報(bào)表之類的都可歸入查看之中。我是用數(shù)據(jù)庫(kù)保存權(quán)限的,因?yàn)橛X得但用戶很多權(quán)限也很多時(shí),數(shù)據(jù)庫(kù)的讀取比XML快上許多。只是在第一次讀取相關(guān)操作時(shí),加載所需的權(quán)限的數(shù)據(jù),加載完后以后訪問就不用再加載。而XML保存一般都在登錄時(shí)加載了所有權(quán)限,但XML在大量數(shù)據(jù)時(shí)讀取速度確實(shí)不感冒。

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)----設(shè)計(jì)思路  回復(fù)  更多評(píng)論   

          2007-01-02 23:46 by 江上一葉舟
          呵呵,我目前所用到的權(quán)限種類繁多,所以權(quán)值也很多,權(quán)值基本的計(jì)算公式我就用了2的n-1次方,這樣權(quán)值可以無(wú)限擴(kuò)展,無(wú)論是增、刪、改、查、報(bào)表、上傳、下載,我都會(huì)分配一個(gè)權(quán)值,如果一個(gè)角色擁有多個(gè)權(quán)限,則這個(gè)角色的權(quán)值為他所擁有的所有權(quán)限的權(quán)值的和,我將權(quán)值的和以16進(jìn)制的形式記錄到庫(kù)中,基本上來(lái)說(shuō)一個(gè)用戶對(duì)一個(gè)資源在數(shù)據(jù)庫(kù)中只有一條權(quán)限記錄

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)----設(shè)計(jì)思路  回復(fù)  更多評(píng)論   

          2007-01-02 23:51 by 江上一葉舟
          另外對(duì)于權(quán)限的記錄來(lái)說(shuō),用數(shù)據(jù)還是xml文件來(lái)記錄我認(rèn)為主要不在讀取速度上來(lái)區(qū)分,因?yàn)榇蠖嘟巧珯?quán)限信息我會(huì)放入內(nèi)存中,所以xml還是數(shù)據(jù)庫(kù)來(lái)記載對(duì)我來(lái)說(shuō)無(wú)所謂,但有一點(diǎn)區(qū)別是致命的,就是當(dāng)你修改權(quán)限信息時(shí),你需要修改相應(yīng)的紀(jì)錄,很明顯修改數(shù)據(jù)庫(kù)記錄要比修改xml文件來(lái)的方便,io操作還是挺讓人~~~嘿嘿

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)----設(shè)計(jì)思路  回復(fù)  更多評(píng)論   

          2007-01-03 12:08 by errorfun
          怎么說(shuō)呢,其實(shí)在以前我也考慮過(guò)你這個(gè)無(wú)限擴(kuò)展的問題,但仔細(xì)一想,權(quán)限不存在無(wú)限擴(kuò)展,權(quán)限基本的都是增刪改查,因?yàn)樗鼈兌际菍?duì)數(shù)據(jù)庫(kù)的操作,
          比如你說(shuō)的上傳功能,它只不過(guò)是對(duì)上傳的內(nèi)容進(jìn)行增加操作,再如下載,也不過(guò)就是對(duì)上傳內(nèi)容的查看操作,你有查看權(quán)限了,自然有下載功能,有增加權(quán)限了,自然有上傳功能。
          再如報(bào)表,你不過(guò)是對(duì)報(bào)表這些內(nèi)容的查看權(quán)限,所以不存在擴(kuò)展性問題。
          不要被擴(kuò)展性所迷惑,我開始設(shè)計(jì)權(quán)限時(shí)也一度被8421的可擴(kuò)展性所迷惑,但最后想仔細(xì),其實(shí)也就只有四個(gè)操作而已,放成四個(gè)字段,比8421的方式容易修改,也容易知道有哪些權(quán)限,不用再進(jìn)行計(jì)算。就像你說(shuō)你用16進(jìn)制存權(quán)限吧,如果我1表示查看,2表示增加,4表示修改,8表示刪除,那如果我進(jìn)行增加操作,那你就得判斷我的權(quán)值是否是2,3,6,7,10,11,14,15,這其實(shí)是增加的復(fù)雜性,權(quán)限系統(tǒng)本身就很復(fù)雜了,如果在權(quán)值上面還進(jìn)行人為的復(fù)雜化,而僅僅為的是不存在的擴(kuò)展性,那我覺得是得不嘗失的。
          如果是在小數(shù)據(jù)量時(shí),XML文件方式不是不錯(cuò)的,可惜權(quán)限本身就是大數(shù)據(jù)量的,針對(duì)這個(gè)問題其實(shí)我也想過(guò)一個(gè)解決方案:把每個(gè)人的權(quán)限放到一個(gè)XML文件中,因?yàn)獒槍?duì)個(gè)人的權(quán)限來(lái)說(shuō),相對(duì)還不算太大,然后用一個(gè)主XML存放相關(guān)文件的信息,而每個(gè)信息對(duì)應(yīng)的就是這個(gè)人員的KEY,能唯一查找到對(duì)應(yīng)的XML。這在某程度上應(yīng)該可以解決XML加載的速度問題,但覺得不安全,因?yàn)閄ML文件很難對(duì)其讀寫進(jìn)行權(quán)限控制,被人不小心刪除了或修改了,那也是一件麻煩的事,所以最終也沒用XML文件實(shí)現(xiàn)。

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)----設(shè)計(jì)思路  回復(fù)  更多評(píng)論   

          2007-01-03 12:23 by errorfun
          PS:上面說(shuō)的對(duì)權(quán)值的判斷,可以對(duì)16進(jìn)制進(jìn)行toBinaryString()進(jìn)行判斷第N位是否為1,但如果在權(quán)限設(shè)置頁(yè)面時(shí),用STRUTS標(biāo)簽是很難進(jìn)行這樣的判斷,一種方式是在頁(yè)面用嵌套JAVA的方式進(jìn)行處理判斷,另一種方式是在數(shù)據(jù)讀取后,在返回前進(jìn)行遍歷處理。第一種不用多說(shuō),現(xiàn)在還在頁(yè)面嵌套JAVA的做法已經(jīng)被人拋棄了,原因就不多說(shuō)。第二種自然只是在效率上有所減少而已。取舍還是看你自己了

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)----設(shè)計(jì)思路  回復(fù)  更多評(píng)論   

          2007-01-03 13:10 by 江上一葉舟
          1,樓上的或許還是沒有看懂我所說(shuō)的權(quán)限設(shè)計(jì),倘若你的‘增加權(quán)限’設(shè)置為1,而a這個(gè)角色當(dāng)前所擁有的權(quán)值是30,那么只需要1&30進(jìn)行二進(jìn)制運(yùn)算,不等于0,則說(shuō)明有增加權(quán)限,沒有你說(shuō)的那么復(fù)雜。

          2,另外你所說(shuō)的在頁(yè)面嵌入java代碼我不知是從何判斷,我是做好了一個(gè)現(xiàn)成的權(quán)限標(biāo)簽,包在你需要判斷的頁(yè)面元素之外,如你可以在頁(yè)面上這么寫:
          <privilege scope='session' operation='create' beanName='userinfo'>
          <input type="button" value="添加">
          </privilege>
          這樣系統(tǒng)會(huì)自動(dòng)為你判斷當(dāng)前用戶是否具有添加權(quán)限,從而為你設(shè)置頁(yè)面上是否顯示添加按鈕

          3,權(quán)限是人定的,我可以把對(duì)這個(gè)資源的增加定為一種權(quán)限,上傳定位一種權(quán)限,客戶可能要求此人只能上傳不能增加(我說(shuō)的上傳是指以excel文檔的形式上傳上來(lái),解析其中的數(shù)據(jù)并添加入數(shù)據(jù)庫(kù)中),都是有可能的,可能你還是認(rèn)為他們都屬于添加操作,但用戶就是要求你不能添加,只能上傳,只有它指定的人才能添加。另外我說(shuō)的報(bào)表,不僅僅是察看,我們可以定義一種形式的pdf報(bào)表,將數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出到pdf,并形成餅圖、曲線圖等,這和查看可以說(shuō)完全是兩種不同的操作,所以權(quán)限是沒有限制的,也就是說(shuō)實(shí)際系統(tǒng)中對(duì)一個(gè)資源的權(quán)限可能最多也就10種撐死了,但我們需要做到的是:無(wú)論對(duì)這個(gè)資源的權(quán)限如何擴(kuò)展,我們都可以應(yīng)對(duì),不是么

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)----設(shè)計(jì)思路  回復(fù)  更多評(píng)論   

          2007-01-03 15:46 by errorfun
          1、確實(shí)沒想過(guò)這么處理,今天算是學(xué)到了。
          2、是一個(gè)好辦法。
          3、如果是上傳EXCEL的話,可以看成是對(duì)文件的添加操作,解析數(shù)據(jù)可以看成是對(duì)數(shù)據(jù)的添加操作,都是一樣的,文件也不過(guò)是數(shù)據(jù)存儲(chǔ)的一種方式,數(shù)據(jù)庫(kù)未出現(xiàn)之前,數(shù)據(jù)就是以文件的形式保存的,難道數(shù)據(jù)庫(kù)出現(xiàn)后,對(duì)文件的上傳而不保存到數(shù)據(jù)庫(kù)中就不能算是添加操作了?不要跟我說(shuō)你只是讓他上傳,但上傳后是不保存在服務(wù)器或數(shù)據(jù)庫(kù)或其它的任何地方,而僅僅是能點(diǎn)上傳按鈕而已。
          而報(bào)表形成餅圖也是一種權(quán)限的話,可以把它設(shè)置成對(duì)餅圖的查看操作,對(duì)曲線圖的查看操作,導(dǎo)出到PDF,也不過(guò)就是對(duì)PDF的查看操作,不過(guò),個(gè)人認(rèn)為,即然你都可以看到源數(shù)據(jù)了,餅圖,曲線圖卻不讓人看,還讓人家自己去畫不成?

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)----設(shè)計(jì)思路  回復(fù)  更多評(píng)論   

          2007-01-03 16:53 by 江上一葉舟
          @errorfun
          1,呵呵,上傳文件僅僅是添加操作,我們只是獲得request流,解析流中數(shù)據(jù),并且添加入數(shù)據(jù)庫(kù),如果您硬要認(rèn)為這個(gè)操作就是添加數(shù)據(jù),我覺得也不無(wú)道理,但客戶的需求是這樣的:高級(jí)系統(tǒng)管理員角色可以一次性用excel導(dǎo)入一大批數(shù)據(jù),普通的管理員不能進(jìn)行這樣的導(dǎo)入操作,只能逐條添加,于是乎,您認(rèn)為的這兩種“添加”操作在我們的系統(tǒng)中被看成是不同的兩種權(quán)限。

          2,您提到“即然你都可以看到源數(shù)據(jù)了,餅圖,曲線圖卻不讓人看,還讓人家自己去畫不成?”,您的這個(gè)想法無(wú)可厚非,但目前的需求是這樣的:普通管理員只能看到數(shù)據(jù),即查看源數(shù)據(jù),而領(lǐng)導(dǎo)要求只對(duì)他開放數(shù)據(jù)匯總成圖形的功能,也就是數(shù)據(jù)統(tǒng)計(jì)后的圖形查看功能,領(lǐng)導(dǎo)不關(guān)心源數(shù)據(jù),只關(guān)系數(shù)據(jù)的統(tǒng)計(jì)結(jié)果和比例

          3,我覺得您的理解固然沒錯(cuò),但不同的客戶的需求不同,您所說(shuō)的內(nèi)容是針對(duì)需求的理解問題:)

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)----設(shè)計(jì)思路  回復(fù)  更多評(píng)論   

          2007-01-03 17:30 by 壞男孩

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)----設(shè)計(jì)思路  回復(fù)  更多評(píng)論   

          2007-01-03 19:37 by errorfun
          @江上一葉舟
          1、對(duì)于所說(shuō)的情況確實(shí)是存在,如果是我,我會(huì)將領(lǐng)導(dǎo)的那種一次性導(dǎo)入看成是另一個(gè)資源操作,而權(quán)限是對(duì)這個(gè)資源操作的設(shè)置,對(duì)普通管理員,則沒有這個(gè)資源操作的權(quán)限,就像一個(gè)頁(yè)有增加,刪除,修改,查看,導(dǎo)入,上傳,下載的功能一樣,增刪改查,我會(huì)看成是一個(gè)ACTION中的操作,導(dǎo)入看成是另一個(gè)ACTION中的操作,上傳下載看成是第三個(gè)ACTION的操作。一個(gè)頁(yè)面分離成三個(gè)ACTION的權(quán)限設(shè)置,就是這樣而已,不是說(shuō)硬要認(rèn)為。數(shù)據(jù)的讀取方法,過(guò)程,可以不必特別在意,抽象出來(lái)后都一樣。“獲得request流,解析流中數(shù)據(jù),并且添加入數(shù)據(jù)庫(kù)”不過(guò)就是獲得數(shù)據(jù),保存數(shù)據(jù)的過(guò)程,和頁(yè)面填寫數(shù)據(jù),然后提交保存入數(shù)據(jù)庫(kù)是相似的,不同的只是過(guò)程。

          2、我說(shuō)的問題之前也說(shuō)了它的權(quán)限設(shè)置可以看成是“對(duì)餅圖的查看操作,對(duì)曲線圖的查看操作,導(dǎo)出到PDF,也不過(guò)就是對(duì)PDF的查看操作”,所以對(duì)于領(lǐng)導(dǎo)的要求也是能完成的,普通管理員只有查看數(shù)據(jù)的權(quán)限,領(lǐng)導(dǎo)有查看餅圖的權(quán)限,查看曲線圖的權(quán)限。

          3、當(dāng)然我說(shuō)的也并非是針對(duì)某一需求的理解,而是將頁(yè)面的操作進(jìn)行抽象后的理解所說(shuō)的。呵呵

          權(quán)限有的是基于ACTION或URI,有的是基于資源的,可能你的是基于資源的,所以和我的想法并不是相同的。權(quán)限開得更清楚也不是沒有好處,至少在設(shè)置權(quán)限時(shí)用戶更加清楚它設(shè)置的權(quán)限對(duì)哪個(gè)操作有影響。
          就像我一開始說(shuō)的,這是我第一個(gè)項(xiàng)目時(shí)所想的權(quán)限系統(tǒng),當(dāng)時(shí)所想的也是要簡(jiǎn)化復(fù)雜的權(quán)限系統(tǒng),而沒有關(guān)注到用戶設(shè)置權(quán)限時(shí)是否清楚的問題,時(shí)隔一年,現(xiàn)在的權(quán)限設(shè)已大不相同,操作的定義在于XML文件中,而非數(shù)據(jù)庫(kù)或用權(quán)值表示,操作可以有十個(gè)或一百個(gè),這都不影響,設(shè)置權(quán)限時(shí)讀取的是XML文件中的信息,它顯示用戶可以設(shè)置哪些操作,操作對(duì)應(yīng)的模塊等等的信息。而設(shè)置后的相應(yīng)信息同樣保存進(jìn)數(shù)據(jù)庫(kù),在用戶登陸時(shí)再進(jìn)行加載。數(shù)據(jù)庫(kù)保存的就是XML文件中的模塊或操作的ID,權(quán)限具有繼承的能力,系統(tǒng)權(quán)限優(yōu)于模塊權(quán)限等等。這些都是根據(jù)市場(chǎng)和自己的理解變化而變化的。只是在看到你這篇文章后令我想起了自己設(shè)計(jì)的第一個(gè)權(quán)限系統(tǒng)而有感而發(fā)而已,不要見怪。

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)----設(shè)計(jì)思路  回復(fù)  更多評(píng)論   

          2007-01-03 22:14 by 小賀
          好文章! 學(xué)習(xí)了!!

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)----設(shè)計(jì)思路  回復(fù)  更多評(píng)論   

          2008-02-28 12:22 by black
          就是泛泛的說(shuō),又沒有一個(gè)簡(jiǎn)單的例子,理論

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)----設(shè)計(jì)思路  回復(fù)  更多評(píng)論   

          2009-03-26 23:40 by interdrp
          權(quán)限->策略->用戶 實(shí)例 www.interdrp.com 下載分銷系統(tǒng)客戶端,用系統(tǒng)提示的默認(rèn)的帳套及用戶名進(jìn)入系統(tǒng)即可。
          有什么好的想法也可以在 http://www.cnblogs.com/interdrp/ 提出,謝謝

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)----設(shè)計(jì)思路  回復(fù)  更多評(píng)論   

          2011-08-10 10:58 by 1h
          rtyrt

          # re: web開發(fā)中的權(quán)限設(shè)計(jì)拙見一二(1)----設(shè)計(jì)思路[未登錄]  回復(fù)  更多評(píng)論   

          2011-08-10 11:00 by lh
          哥們! 可以將代碼和數(shù)據(jù)放在我郵箱嗎。謝謝
          76162111@qq.com
          主站蜘蛛池模板: 镶黄旗| 子洲县| 司法| 叶城县| 阿拉善右旗| 建阳市| 庆元县| 潍坊市| 洞头县| 锡林浩特市| 东乌珠穆沁旗| 馆陶县| 若尔盖县| 武安市| 鸡东县| 自治县| 含山县| 上饶县| 麟游县| 大庆市| 扶余县| 雅安市| 高尔夫| 石泉县| 宝兴县| 确山县| 政和县| 吉林市| 禄劝| 娱乐| 通渭县| 甘孜| 定结县| 师宗县| 东辽县| 重庆市| 旌德县| 丹凤县| 汾阳市| 福海县| 西华县|