本發(fā)明涉及系統(tǒng)權(quán)限管理技術(shù)領(lǐng)域,具體而言,涉及一種權(quán)限樹聯(lián)動重現(xiàn)方法、裝置及系統(tǒng),其根據(jù)不同用戶所擁有的區(qū)域權(quán)限和功能權(quán)限以三態(tài)樹的形式重現(xiàn)給用戶。
背景技術(shù):在門禁監(jiān)控、動力與環(huán)境監(jiān)控、視頻監(jiān)控等網(wǎng)管系統(tǒng)中,只要涉及到系統(tǒng)的權(quán)限管理,就需要處理一些層次結(jié)構(gòu)對象的顯示,例如用戶所擁有的監(jiān)控區(qū)域權(quán)限、系統(tǒng)的功能權(quán)限等。在權(quán)限管理中,不同的用戶是擁有不同的區(qū)域權(quán)限和功能權(quán)限的,當(dāng)具有用戶權(quán)限管理功能的用戶需要查看某個(gè)用戶所擁有的區(qū)域權(quán)限和功能權(quán)限時(shí),區(qū)域權(quán)限樹和功能權(quán)限樹以三態(tài)樹的形式重現(xiàn)顯示,這樣可以直觀明了地將某用戶所擁有的權(quán)限展現(xiàn)在用戶眼前,其中,所述三態(tài)樹是指一個(gè)樹狀結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)包括選中、半選中以及非選中三種狀態(tài)。中國專利CN200510098664.7公開了一種網(wǎng)絡(luò)優(yōu)化系統(tǒng)中網(wǎng)元對象的三態(tài)樹呈現(xiàn)和定位方法,其對于能夠很好的呈現(xiàn)三態(tài)樹,其主要特征如下:1、如果一個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn)都被選中,則這個(gè)節(jié)點(diǎn)就處于“選中狀態(tài)”;2、如果一個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn)都沒有被選中,那么這個(gè)節(jié)點(diǎn)就處于“非選中”狀態(tài);3、如果一個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn)中至少有一個(gè)子節(jié)點(diǎn)被選中,同時(shí)至少有一個(gè)子節(jié)點(diǎn)沒有被選中,那么這個(gè)節(jié)點(diǎn)就處于半選中狀態(tài);4、如果選中某個(gè)父節(jié)點(diǎn),則該父節(jié)點(diǎn)的所有子節(jié)點(diǎn)就會全部選中;5、如果選中中間層的某個(gè)節(jié)點(diǎn),則該中間層的所有子節(jié)點(diǎn)全部選中;遍歷該中間層的所有兄弟節(jié)點(diǎn),如果該中間層的所有兄弟節(jié)點(diǎn)均為選中狀態(tài),則該中間層節(jié)點(diǎn)的父節(jié)點(diǎn)為選中狀態(tài);如果該中間層節(jié)點(diǎn)的兄弟節(jié)點(diǎn)中至少有一個(gè)為“非選中”狀態(tài),則該中間層節(jié)點(diǎn)的父節(jié)點(diǎn)為半選中狀態(tài),然后尋找該中間層節(jié)點(diǎn)的父節(jié)點(diǎn)的父節(jié)點(diǎn),直到根節(jié)點(diǎn)。對于該現(xiàn)有技術(shù)的上述技術(shù)特征1、2、3,在對網(wǎng)元對象進(jìn)行三態(tài)樹呈現(xiàn)且需要確定某一個(gè)節(jié)點(diǎn)的狀態(tài)時(shí),要搜索完該節(jié)點(diǎn)的所有子節(jié)點(diǎn)的狀態(tài)之后來才能其確定的狀態(tài),呈現(xiàn)效率較低。對于該現(xiàn)有技術(shù)的上述技術(shù)特征5,在對網(wǎng)元對象進(jìn)行三態(tài)樹呈現(xiàn)中,先從上向下搜索到葉節(jié)點(diǎn),然后從葉節(jié)點(diǎn)開始,依次向上搜索,根據(jù)兄弟節(jié)點(diǎn)的狀態(tài)確定父節(jié)點(diǎn)的狀態(tài),這在效率方面也是有待提高的。對于該現(xiàn)有技術(shù)的上述技術(shù)特征4,其用在用戶權(quán)限管理方面,會存在權(quán)限擴(kuò)散問題。例如,如圖1所示,假設(shè)用戶admin管理的用戶test擁有AAA區(qū)域權(quán)限,其對應(yīng)的三態(tài)樹結(jié)構(gòu)如圖1所示。當(dāng)用戶test登陸系統(tǒng),創(chuàng)建其能管理的用戶test-a,且給用戶test-a授予了如圖2所示的區(qū)域權(quán)限。當(dāng)用戶admin登陸,查看用戶test-a擁有的權(quán)限時(shí),如果用該現(xiàn)有技術(shù)的上述技術(shù)特征4所述的方法聯(lián)動重現(xiàn),其三態(tài)樹的呈現(xiàn)結(jié)果將如圖3所示,而在實(shí)際應(yīng)用中,用戶admin查看用戶test-a的權(quán)限時(shí),其三態(tài)樹的呈現(xiàn)應(yīng)該與圖1是一致的,然而,通過該現(xiàn)有技術(shù)提供的技術(shù)方案,在用戶admin查看用戶test-a的區(qū)域權(quán)限時(shí)出現(xiàn)了用戶權(quán)限擴(kuò)散的問題,從而一定程度上會給用戶帶來迷惑,降低了用戶體驗(yàn)。另外,對于用戶權(quán)限管理而言,在實(shí)際應(yīng)用過程中,用戶可能會新增或者刪除某個(gè)區(qū)域權(quán)限或功能權(quán)限,相應(yīng)地,三態(tài)樹中的節(jié)點(diǎn)對象的狀態(tài)也會重新確定樹中節(jié)點(diǎn)的狀態(tài),在解決該技術(shù)問題時(shí),對于上述現(xiàn)有技術(shù)方案,其同樣存在用戶權(quán)限擴(kuò)散的問題。如圖4所示,例如,用戶test-a擁有如下區(qū)域權(quán)限:若登陸用戶添加了AAAC區(qū)域,由于AAAC是新增的區(qū)域,顯然對于該區(qū)域用戶test-a是沒有權(quán)限的,如圖5所示,當(dāng)采用上述現(xiàn)有技術(shù)中的技術(shù)特征4所述的方法重現(xiàn)三態(tài)樹時(shí),AAAC節(jié)點(diǎn)也處于被選中狀態(tài),從而產(chǎn)生了權(quán)限擴(kuò)散。同時(shí),對于此種增加區(qū)域節(jié)點(diǎn)的情況,例如在基于圖4的基礎(chǔ)上增加區(qū)域AAAC,如果采用上述現(xiàn)有技術(shù)方案的技術(shù)特征5所述的方法,如圖6所示,在進(jìn)行網(wǎng)元對象三態(tài)樹重現(xiàn)時(shí),由于AAAC節(jié)點(diǎn)的添加導(dǎo)致原AAA節(jié)點(diǎn)的狀態(tài)由選中狀態(tài)變成半選中狀態(tài),并且,節(jié)點(diǎn)中心、A、AA應(yīng)該是半選中狀態(tài)的,卻出現(xiàn)是選中狀態(tài),這樣一來,導(dǎo)致出現(xiàn)了三態(tài)權(quán)限樹混亂的情況。
技術(shù)實(shí)現(xiàn)要素:為了克服現(xiàn)有技術(shù)實(shí)現(xiàn)三態(tài)樹重現(xiàn)時(shí)引起的權(quán)限擴(kuò)散、三態(tài)重現(xiàn)混亂的問題,本發(fā)明的目的在于提供一種權(quán)限樹聯(lián)動重現(xiàn)方法、裝置及系統(tǒng)。為了達(dá)到本發(fā)明的目的,本發(fā)明采用以下技術(shù)方案實(shí)現(xiàn):一種權(quán)限樹聯(lián)動重現(xiàn)方法,包括:從服務(wù)器端獲取用戶的區(qū)域權(quán)限邏輯數(shù)據(jù)或功能權(quán)限邏輯數(shù)據(jù);依據(jù)所述區(qū)域權(quán)限邏輯數(shù)據(jù)或功能權(quán)限邏輯數(shù)據(jù)呈現(xiàn)用戶權(quán)限三態(tài)樹,并從根節(jié)點(diǎn)開始遍歷并依次設(shè)置節(jié)點(diǎn)的狀態(tài),其中,設(shè)置節(jié)點(diǎn)狀態(tài)的步驟包括:判斷當(dāng)前節(jié)點(diǎn)是否為葉節(jié)點(diǎn),如果是葉節(jié)點(diǎn),則判斷該節(jié)點(diǎn)是否是選中節(jié)點(diǎn),如果是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為選中狀態(tài),如果不是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為非選中狀態(tài);如果該節(jié)點(diǎn)不為葉節(jié)點(diǎn),則依據(jù)其子節(jié)點(diǎn)的狀態(tài)情況設(shè)置該節(jié)點(diǎn)的狀態(tài)。優(yōu)選地,如果該節(jié)點(diǎn)不為葉節(jié)點(diǎn),則依據(jù)其子節(jié)點(diǎn)的狀態(tài)情況設(shè)置該節(jié)點(diǎn)的狀態(tài)的處理方法包括:如果當(dāng)前節(jié)點(diǎn)下的子節(jié)點(diǎn)都是選中節(jié)點(diǎn),則向下搜索未選中的節(jié)點(diǎn),若搜索到未選中節(jié)點(diǎn)就退出搜索,并設(shè)置該節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài),否則,則設(shè)置該節(jié)點(diǎn)的狀態(tài)為選中狀態(tài);如果當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)都不是選中節(jié)點(diǎn),則繼續(xù)向該當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)向下搜索,若搜索到選中節(jié)點(diǎn)就退出搜索,并設(shè)置該當(dāng)前節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài);若沒有搜索到選中節(jié)點(diǎn),則設(shè)置該節(jié)點(diǎn)的狀態(tài)為非選中狀態(tài);如果當(dāng)前節(jié)點(diǎn)下的子節(jié)點(diǎn)中存在選中節(jié)點(diǎn),且個(gè)數(shù)小于該當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),則設(shè)置該當(dāng)前節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài)。優(yōu)選地,當(dāng)用戶增加或刪除了區(qū)域?qū)ο蠡蚬δ軐ο髸r(shí),還包括如下步驟:判斷該節(jié)點(diǎn)是否為葉節(jié)點(diǎn),如果是葉節(jié)點(diǎn),則判斷該節(jié)點(diǎn)是否是選中節(jié)點(diǎn),如果是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為選中狀態(tài),如果不是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為非選中狀態(tài);如果該節(jié)點(diǎn)不為葉節(jié)點(diǎn),則依據(jù)其子節(jié)點(diǎn)的狀態(tài)情況設(shè)置該節(jié)點(diǎn)的狀態(tài):如果該節(jié)點(diǎn)下的子節(jié)點(diǎn)都是選中節(jié)點(diǎn),則向下搜索未選中的節(jié)點(diǎn),若搜索到未選中節(jié)點(diǎn)就退出搜索,并設(shè)置該節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài),否則,則設(shè)置該節(jié)點(diǎn)的狀態(tài)為選中狀態(tài);如果該節(jié)點(diǎn)的子節(jié)點(diǎn)都不是選中節(jié)點(diǎn),則繼續(xù)向該節(jié)點(diǎn)的子節(jié)點(diǎn)向下搜索,若搜索到選中節(jié)點(diǎn)就退出搜索,并設(shè)置該節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài);若沒有搜索到選中節(jié)點(diǎn),則設(shè)置該節(jié)點(diǎn)的狀態(tài)為非選中狀態(tài);如果該節(jié)點(diǎn)下的子節(jié)點(diǎn)中存在選中節(jié)點(diǎn),且個(gè)數(shù)小于該節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),則設(shè)置該節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài)。優(yōu)選地,從服務(wù)器端獲取的用戶的區(qū)域權(quán)限邏輯數(shù)據(jù)或功能權(quán)限邏輯數(shù)據(jù)存儲于服務(wù)器端的數(shù)據(jù)庫之中,且數(shù)據(jù)庫中只存儲了選中的節(jié)點(diǎn)ID。一種權(quán)限樹聯(lián)動重現(xiàn)裝置,包括:獲取模塊,用于從服務(wù)器端獲取用戶的區(qū)域權(quán)限邏輯數(shù)據(jù)或功能權(quán)限邏輯數(shù)據(jù);呈現(xiàn)模塊,用于依據(jù)所述區(qū)域權(quán)限邏輯數(shù)據(jù)或功能權(quán)限邏輯數(shù)據(jù)呈現(xiàn)用戶權(quán)限三態(tài)樹,并從根節(jié)點(diǎn)開始遍歷并依次設(shè)置節(jié)點(diǎn)的狀態(tài),其中,呈現(xiàn)模塊設(shè)置節(jié)點(diǎn)狀態(tài)的步驟包括:判斷當(dāng)前節(jié)點(diǎn)是否為葉節(jié)點(diǎn),如果是葉節(jié)點(diǎn),則判斷該節(jié)點(diǎn)是否是選中節(jié)點(diǎn),如果是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為選中狀態(tài),如果不是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為非選中狀態(tài);如果該節(jié)點(diǎn)不為葉節(jié)點(diǎn),則依據(jù)其子節(jié)點(diǎn)的狀態(tài)情況設(shè)置該節(jié)點(diǎn)的狀態(tài)。優(yōu)選地,如果該節(jié)點(diǎn)不為葉節(jié)點(diǎn),呈現(xiàn)模塊依據(jù)其子節(jié)點(diǎn)的狀態(tài)情況設(shè)置該節(jié)點(diǎn)的狀態(tài)的處理方法包括:如果當(dāng)前節(jié)點(diǎn)下的子節(jié)點(diǎn)都是選中節(jié)點(diǎn),則向下搜索未選中的節(jié)點(diǎn),若搜索到未選中節(jié)點(diǎn)就退出搜索,并設(shè)置該節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài),否則,則設(shè)置該節(jié)點(diǎn)的狀態(tài)為選中狀態(tài);如果當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)都不是選中節(jié)點(diǎn),則繼續(xù)向該當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)向下搜索,若搜索到選中節(jié)點(diǎn)就退出搜索,并設(shè)置該當(dāng)前節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài);若沒有搜索到選中節(jié)點(diǎn),則設(shè)置該節(jié)點(diǎn)的狀態(tài)為非選中狀態(tài);如果當(dāng)前節(jié)點(diǎn)下的子節(jié)點(diǎn)中存在選中節(jié)點(diǎn),且個(gè)數(shù)小于該當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),則設(shè)置該當(dāng)前節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài)。優(yōu)選地,所述權(quán)限樹聯(lián)動重現(xiàn)裝置還包括:判斷模塊,用于判斷用戶是否增加或刪除了區(qū)域?qū)ο蠡蚬δ軐ο?,?dāng)判斷模塊判斷出用戶增加或刪除了區(qū)域?qū)ο蠡蚬δ軐ο髸r(shí),呈現(xiàn)模塊還用于設(shè)置該節(jié)點(diǎn)的狀態(tài),包括如下處理步驟:當(dāng)判斷該節(jié)點(diǎn)是否為葉節(jié)點(diǎn),如果是葉節(jié)點(diǎn),則判斷該節(jié)點(diǎn)是否是選中節(jié)點(diǎn),如果是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為選中狀態(tài),如果不是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為非選中狀態(tài);如果該節(jié)點(diǎn)不為葉節(jié)點(diǎn),則依據(jù)其子節(jié)點(diǎn)的狀態(tài)情況設(shè)置該節(jié)點(diǎn)的狀態(tài):如果該節(jié)點(diǎn)下的子節(jié)點(diǎn)都是選中節(jié)點(diǎn),則向下搜索未選中的節(jié)點(diǎn),若搜索到未選中節(jié)點(diǎn)就退出搜索,并設(shè)置該節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài),否則,則設(shè)置該節(jié)點(diǎn)的狀態(tài)為選中狀態(tài);如果該節(jié)點(diǎn)的子節(jié)點(diǎn)都不是選中節(jié)點(diǎn),則繼續(xù)向該節(jié)點(diǎn)的子節(jié)點(diǎn)向下搜索,若搜索到選中節(jié)點(diǎn)就退出搜索,并設(shè)置該節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài);若沒有搜索到選中節(jié)點(diǎn),則設(shè)置該節(jié)點(diǎn)的狀態(tài)為非選中狀態(tài);如果該節(jié)點(diǎn)下的子節(jié)點(diǎn)中存在選中節(jié)點(diǎn),且個(gè)數(shù)小于該節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),則設(shè)置該節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài)。優(yōu)選地,獲取模塊從服務(wù)器端獲取的用戶的區(qū)域權(quán)限邏輯數(shù)據(jù)或功能權(quán)限邏輯數(shù)據(jù)存儲于服務(wù)器端的數(shù)據(jù)庫之中,且數(shù)據(jù)庫中只存儲了選中的節(jié)點(diǎn)ID。一種權(quán)限樹聯(lián)動重現(xiàn)系統(tǒng),包括服務(wù)器,還包括如上所述的權(quán)限樹聯(lián)動重現(xiàn)裝置,所述裝置包括:獲取模塊,用于從服務(wù)器端獲取用戶的區(qū)域權(quán)限邏輯數(shù)據(jù)或功能權(quán)限邏輯數(shù)據(jù);呈現(xiàn)模塊,用于依據(jù)所述區(qū)域權(quán)限邏輯數(shù)據(jù)或功能權(quán)限邏輯數(shù)據(jù)呈現(xiàn)用戶權(quán)限三態(tài)樹,并從根節(jié)點(diǎn)開始遍歷并依次設(shè)置節(jié)點(diǎn)的狀態(tài),其中,呈現(xiàn)模塊設(shè)置節(jié)點(diǎn)狀態(tài)的步驟包括:判斷當(dāng)前節(jié)點(diǎn)是否為葉節(jié)點(diǎn),如果是葉節(jié)點(diǎn),則判斷該節(jié)點(diǎn)是否是選中節(jié)點(diǎn),如果是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為選中狀態(tài),如果不是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為非選中狀態(tài);如果該節(jié)點(diǎn)不為葉節(jié)點(diǎn),則依據(jù)其子節(jié)點(diǎn)的狀態(tài)情況設(shè)置該節(jié)點(diǎn)的狀態(tài)。采用本發(fā)明,與現(xiàn)有技術(shù)中從下往上確定三態(tài)樹中節(jié)點(diǎn)狀態(tài)的方法相比,在確定節(jié)點(diǎn)狀態(tài)的效率上有所改進(jìn),提高了三態(tài)樹重現(xiàn)的效率。解決了將現(xiàn)有技術(shù)用于權(quán)限樹中引起的權(quán)限擴(kuò)散問題,同時(shí)解決了增刪節(jié)點(diǎn)后重現(xiàn)樹的三態(tài)問題。附圖說明圖1是現(xiàn)有的三態(tài)樹呈現(xiàn)方法中三態(tài)樹結(jié)構(gòu)示意圖;圖2是現(xiàn)有的三態(tài)樹呈現(xiàn)方法中權(quán)限示意圖;圖3是現(xiàn)有的三態(tài)樹呈現(xiàn)方法中三態(tài)樹呈現(xiàn)結(jié)構(gòu)示意圖;圖4是現(xiàn)有的三態(tài)樹呈現(xiàn)方法中權(quán)限示意圖;圖5是現(xiàn)有的三態(tài)樹呈現(xiàn)方法中出現(xiàn)權(quán)限擴(kuò)散的示意圖;圖6是現(xiàn)有的三態(tài)樹呈現(xiàn)方法中出現(xiàn)三態(tài)權(quán)限樹混亂的示意圖;圖7是本發(fā)明實(shí)施例提供的在未增加區(qū)域?qū)ο髸r(shí)的三態(tài)樹重現(xiàn)算法流程圖;圖8是本發(fā)明實(shí)施例提供的在增加區(qū)域?qū)ο髸r(shí)的三態(tài)樹重現(xiàn)算法流程圖;圖9是本發(fā)明實(shí)施例提供的三態(tài)樹呈現(xiàn)方法中三態(tài)樹結(jié)構(gòu)示意圖;圖10是本發(fā)明實(shí)施例提供的三態(tài)樹呈現(xiàn)方法中三態(tài)樹結(jié)構(gòu)示意圖;圖11是本發(fā)明實(shí)施例提供的三態(tài)樹呈現(xiàn)方法中三態(tài)樹結(jié)構(gòu)示意圖;圖12是本發(fā)明實(shí)施例提供的三態(tài)樹呈現(xiàn)方法中三態(tài)樹結(jié)構(gòu)示意圖;圖13是本發(fā)明實(shí)施例提供的三態(tài)樹呈現(xiàn)方法中三態(tài)樹結(jié)構(gòu)示意圖;圖14是本發(fā)明實(shí)施例提供的權(quán)限樹聯(lián)動重現(xiàn)系統(tǒng)結(jié)構(gòu)示意圖。本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)異效果,下面將結(jié)合具體實(shí)施例以及附圖做進(jìn)一步的說明。具體實(shí)施方式下面結(jié)合附圖和具體實(shí)施例對本發(fā)明所述技術(shù)方案作進(jìn)一步的詳細(xì)描述,以使本領(lǐng)域的技術(shù)人員可以更好的理解本發(fā)明并能予以實(shí)施,但所舉實(shí)施例不作為對本發(fā)明的限定。本發(fā)明實(shí)施例提供的權(quán)限樹聯(lián)動重現(xiàn)方法主要是在三態(tài)樹的重現(xiàn)過程中,實(shí)現(xiàn)從上到下的搜索確定樹中各節(jié)點(diǎn)的狀態(tài)(選中、半選中、非選中),下面分別予以闡述。一、未添加區(qū)域?qū)ο蠡蚬δ軐ο蟮娜龖B(tài)樹重現(xiàn)處理方法步驟一、從服務(wù)器端獲取用戶所擁有的區(qū)域權(quán)限或功能權(quán)限,在實(shí)際應(yīng)用中,從服務(wù)器端獲取的用戶權(quán)限是從數(shù)據(jù)庫中獲取的,通常數(shù)據(jù)庫中只保存了選中的節(jié)點(diǎn)ID。步驟二、從根節(jié)點(diǎn)開始遍歷并依次設(shè)置節(jié)點(diǎn)的狀態(tài)。節(jié)點(diǎn)的狀態(tài)分為“選中”、“半選中”、“非選中”三種狀態(tài)。每個(gè)根節(jié)點(diǎn)的狀態(tài)取決于該節(jié)點(diǎn)的子節(jié)點(diǎn)的狀態(tài),無需根據(jù)該根節(jié)點(diǎn)下的所有子節(jié)點(diǎn)的狀態(tài)進(jìn)行判斷。因?yàn)樵诮o用戶授予權(quán)限時(shí),處于“選中”狀態(tài)的節(jié)點(diǎn)都保存在用戶權(quán)限數(shù)據(jù)表中了(處于“半選”和“不選”的節(jié)點(diǎn)未保存到數(shù)據(jù)表中),如果某個(gè)節(jié)點(diǎn)是“選中”節(jié)點(diǎn),那么其所有的子節(jié)點(diǎn)必定是處于選中狀態(tài)。所以要確定某個(gè)根節(jié)點(diǎn)的狀態(tài),只需判斷該根節(jié)點(diǎn)的子節(jié)點(diǎn)是否都是選中節(jié)點(diǎn)即可確定。確定該根節(jié)點(diǎn)的狀態(tài)的方法分以下兩步進(jìn)行處理:A、判斷當(dāng)前節(jié)點(diǎn)是否是葉節(jié)點(diǎn),其中,當(dāng)該節(jié)點(diǎn)下有子節(jié)點(diǎn)時(shí),不為葉節(jié)點(diǎn);當(dāng)該節(jié)點(diǎn)下沒有子節(jié)點(diǎn)時(shí),為葉節(jié)點(diǎn)。如果是葉節(jié)點(diǎn),則判斷該節(jié)點(diǎn)是否是“選中”節(jié)點(diǎn),如果是“選中”節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為“選中”狀態(tài);如果不是“選中”節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為“非選中”狀態(tài)。如果該節(jié)點(diǎn)不為葉節(jié)點(diǎn),則進(jìn)入以下處理步驟;B、確定非葉節(jié)點(diǎn)的狀態(tài)。非葉節(jié)點(diǎn)的狀態(tài)確定主要取決于其子節(jié)點(diǎn)的狀態(tài),所以在確定當(dāng)前節(jié)點(diǎn)的狀態(tài)前,先判斷該節(jié)點(diǎn)的子節(jié)點(diǎn)的勾選情況,例如在本發(fā)明實(shí)施例中,處理方法具體包括如下步驟:1、如果當(dāng)前節(jié)點(diǎn)下的子節(jié)點(diǎn)都是“選中”節(jié)點(diǎn),則返回值為“1”,根據(jù)該返回值確定該節(jié)點(diǎn)的狀態(tài)為“選中”狀態(tài);2、如果當(dāng)前節(jié)點(diǎn)的下子節(jié)點(diǎn)都不是“選中”節(jié)點(diǎn)(值得注意的是,在本發(fā)明實(shí)施例中,在重現(xiàn)權(quán)限樹狀態(tài)的過程中將“半選中”節(jié)點(diǎn)也當(dāng)作“非選中”的節(jié)點(diǎn)處理。),則返回值為“0”,則繼續(xù)向該節(jié)點(diǎn)子節(jié)點(diǎn)的子節(jié)點(diǎn)搜索,只要搜索到“選中”節(jié)點(diǎn)就退出搜索,則可確定該節(jié)點(diǎn)的狀態(tài)為“半選中”狀態(tài);如果沒有搜索到“選中節(jié)點(diǎn)”則該節(jié)點(diǎn)的狀態(tài)為“非選中”狀態(tài);3、如果當(dāng)前節(jié)點(diǎn)下的子節(jié)點(diǎn)中,存在“選中”節(jié)點(diǎn),且個(gè)數(shù)小于該節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),則返回值為“2”,根據(jù)該返回值確定該節(jié)點(diǎn)的狀態(tài)為“半選中”狀態(tài)。二、添加了區(qū)域后的三態(tài)重現(xiàn)處理算法對于用戶在權(quán)限樹中新增了節(jié)點(diǎn)的問題,處理方法如下:A、判斷用戶是否增加或刪除了區(qū)域?qū)ο蠡蚬δ軐ο?,如果增刪了區(qū)域?qū)ο蠡蚬δ軐ο?,則進(jìn)入以下處理步驟B;B、判斷該節(jié)點(diǎn)是否是葉節(jié)點(diǎn),即當(dāng)前節(jié)點(diǎn)下是否有子節(jié)點(diǎn)。如果是葉節(jié)點(diǎn),則判斷當(dāng)前節(jié)點(diǎn)是否是“選中”節(jié)點(diǎn),如果是“選中”節(jié)點(diǎn),則將當(dāng)前節(jié)點(diǎn)設(shè)置為“選中”狀態(tài);如果不是“選中”節(jié)點(diǎn),則將當(dāng)前節(jié)點(diǎn)設(shè)置為“非選中”狀態(tài)。如果當(dāng)前節(jié)點(diǎn)不為葉節(jié)點(diǎn),則進(jìn)入以下處理步驟C;C、主要是確定非葉節(jié)點(diǎn)的狀態(tài)。非葉節(jié)點(diǎn)的狀態(tài)確定主要取決于其子節(jié)點(diǎn)的狀態(tài),所以在確定當(dāng)前節(jié)點(diǎn)的狀態(tài)前,先判斷該節(jié)點(diǎn)的子節(jié)點(diǎn)的勾選情況,本發(fā)明實(shí)施例采用的處理方法具體包括如下步驟:1、如果當(dāng)前節(jié)點(diǎn)下的子節(jié)點(diǎn)都是“選中”節(jié)點(diǎn),則返回值為“1”,然后遞歸查子節(jié)點(diǎn)的子節(jié)點(diǎn)中是存在“非選中”的節(jié)點(diǎn),只要找到,則退出搜索,確定當(dāng)前節(jié)點(diǎn)的狀態(tài)為“選中”狀態(tài);2、如果當(dāng)前節(jié)點(diǎn)的下子節(jié)點(diǎn)都不是“選中”節(jié)點(diǎn),則返回值為“0”,則繼續(xù)向該節(jié)點(diǎn)子節(jié)點(diǎn)的子節(jié)點(diǎn)搜索,只要搜索到“選中”節(jié)點(diǎn)就退出搜索,則可確定該節(jié)點(diǎn)的狀態(tài)為“半選中”狀態(tài);如果沒有搜索到“選中節(jié)點(diǎn)”則該節(jié)點(diǎn)的狀態(tài)為“非選中”狀態(tài);3、如果當(dāng)前節(jié)點(diǎn)下的子節(jié)點(diǎn)中,存在“選中”節(jié)點(diǎn),且個(gè)數(shù)小于該節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),則返回值為“2”,根據(jù)該返回值確定當(dāng)前節(jié)點(diǎn)的狀態(tài)為“半選中”狀態(tài)。如圖7所示,其為本發(fā)明實(shí)施例提供的在未增加區(qū)域?qū)ο髸r(shí)的三態(tài)樹重現(xiàn)算法流程圖,其具體流程如下:步驟1、從應(yīng)用服務(wù)器端獲取用戶所擁有的區(qū)域權(quán)限或功能權(quán)限到內(nèi)存列表中。用戶擁有的區(qū)域權(quán)限和功能權(quán)限對應(yīng)于三態(tài)樹中處于“選中”狀態(tài)的節(jié)點(diǎn)。步驟2、判斷系統(tǒng)是否新增了區(qū)域節(jié)點(diǎn)。步驟3、從根節(jié)點(diǎn)開始遍歷,從上往下開始遍歷設(shè)置樹中每個(gè)節(jié)點(diǎn)的狀態(tài)。該遍歷步驟主要分為以下3步:1、判斷當(dāng)前節(jié)點(diǎn)是否是葉節(jié)點(diǎn),如果是葉節(jié)點(diǎn),則判斷內(nèi)存列表中該節(jié)點(diǎn)是否是選中節(jié)點(diǎn),如果是,則設(shè)置該節(jié)點(diǎn)為“選中”狀態(tài);如果不是,則設(shè)置該節(jié)點(diǎn)為“非選中”狀態(tài);2、如果當(dāng)前節(jié)點(diǎn)不是葉節(jié)點(diǎn),則根據(jù)該節(jié)點(diǎn)的子節(jié)點(diǎn)確定該節(jié)點(diǎn)的狀態(tài),其具體方法為:1)如果當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)都能在內(nèi)存列表中找到,則可確定該節(jié)點(diǎn)為“選中”狀態(tài)。如圖9所示,用戶沒有增加區(qū)域,對于A節(jié)點(diǎn),其子節(jié)點(diǎn)AA、AB、AC都是選中節(jié)點(diǎn),這些選中節(jié)點(diǎn)都會保存在內(nèi)存列表中,故由AA、AB、AC即可確定A節(jié)點(diǎn)為“選中”狀態(tài)。2)如果該節(jié)點(diǎn)的子節(jié)點(diǎn)只有部分能在內(nèi)存列表中不到,則可確定該節(jié)點(diǎn)為“半選中”狀態(tài)。如圖10所示,對于“中心”這個(gè)節(jié)點(diǎn),在內(nèi)存列表中只能找到A節(jié)點(diǎn),B節(jié)點(diǎn)是未選中節(jié)點(diǎn),則可以確定“中心”這個(gè)節(jié)點(diǎn)是“半選中”狀態(tài)。3)如果當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)在內(nèi)存列表中找不到,則遞歸向下搜索該子節(jié)點(diǎn),只要能在該節(jié)點(diǎn)的所有子節(jié)點(diǎn)中找到“選中”的節(jié)點(diǎn),則該當(dāng)前節(jié)點(diǎn)即可設(shè)置為“半選中”狀態(tài),返回設(shè)置下節(jié)點(diǎn);如果在該節(jié)點(diǎn)的所有子節(jié)點(diǎn)中找不到“選中”的節(jié)點(diǎn),則當(dāng)前節(jié)點(diǎn)即可設(shè)置為“非選中”狀態(tài)。如圖11所示,對于“中心”這個(gè)節(jié)點(diǎn)而言,其子節(jié)點(diǎn)A和B都不能在內(nèi)存列表中找到,則繼續(xù)向下搜索,當(dāng)搜索到A的子節(jié)點(diǎn)中有一個(gè)AB在內(nèi)存列表中,則退出搜索,確定A節(jié)點(diǎn)為“半選中”狀態(tài)。如圖12所示,對于AA節(jié)點(diǎn)而言,其子節(jié)點(diǎn)AAA、AAB、AAC在內(nèi)存列表中都找不到,則確定AA節(jié)點(diǎn)為“非選中”狀態(tài)。3、遞歸設(shè)置樹中所有節(jié)點(diǎn)的狀態(tài)。如圖8所示,其為本發(fā)明實(shí)施例提供的在增加區(qū)域?qū)ο髸r(shí)的三態(tài)樹重現(xiàn)算法流程圖,其主要步驟與未添加區(qū)域的三態(tài)重現(xiàn)處理算法一樣,只是在遍歷步驟略有不同。例如,如果用戶在AA節(jié)點(diǎn)下增加了AAD區(qū)域,此時(shí),在權(quán)限上來講,AAD區(qū)域不被用戶test-a所擁有,但是從服務(wù)器獲取的權(quán)限的列表內(nèi)存中,A的子區(qū)域AA、AB、AC依然是選中“節(jié)點(diǎn)”,卻并不能就此確定A的狀態(tài)為“選中”狀態(tài),需要繼續(xù)向下搜索尋找未選中的節(jié)點(diǎn),只要找到未選中節(jié)點(diǎn),就退出搜索,確定A節(jié)點(diǎn)為“半選中”狀態(tài)。否則,可以確定A節(jié)點(diǎn)為“選中”狀態(tài),其呈現(xiàn)的三態(tài)樹結(jié)構(gòu)如圖13所示。相應(yīng)地,本發(fā)明實(shí)施例還提供了一種權(quán)限樹聯(lián)動重現(xiàn)裝置20,如圖14所示,包括:獲取模塊201,用于從服務(wù)器端10獲取用戶的區(qū)域權(quán)限邏輯數(shù)據(jù)或功能權(quán)限邏輯數(shù)據(jù);優(yōu)選地,獲取模塊201從服務(wù)器端10獲取的用戶的區(qū)域權(quán)限邏輯數(shù)據(jù)或功能權(quán)限邏輯數(shù)據(jù)存儲于服務(wù)器端10的數(shù)據(jù)庫之中,且數(shù)據(jù)庫中只存儲了選中的節(jié)點(diǎn)ID。呈現(xiàn)模塊203,用于依據(jù)所述區(qū)域權(quán)限邏輯數(shù)據(jù)或功能權(quán)限邏輯數(shù)據(jù)呈現(xiàn)用戶權(quán)限三態(tài)樹,并從根節(jié)點(diǎn)開始遍歷并依次設(shè)置節(jié)點(diǎn)的狀態(tài),其中,呈現(xiàn)模塊203設(shè)置節(jié)點(diǎn)狀態(tài)的步驟包括:判斷當(dāng)前節(jié)點(diǎn)是否為葉節(jié)點(diǎn),如果是葉節(jié)點(diǎn),則判斷該節(jié)點(diǎn)是否是選中節(jié)點(diǎn),如果是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為選中狀態(tài),如果不是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為非選中狀態(tài);如果該節(jié)點(diǎn)不為葉節(jié)點(diǎn),則依據(jù)其子節(jié)點(diǎn)的狀態(tài)情況設(shè)置該節(jié)點(diǎn)的狀態(tài)。在一種優(yōu)選實(shí)施方式中,如果該節(jié)點(diǎn)不為葉節(jié)點(diǎn),呈現(xiàn)模塊20依據(jù)其子節(jié)點(diǎn)的狀態(tài)情況設(shè)置該節(jié)點(diǎn)的狀態(tài)的處理方法包括:1、如果當(dāng)前節(jié)點(diǎn)下的子節(jié)點(diǎn)都是選中節(jié)點(diǎn),則設(shè)置該節(jié)點(diǎn)的狀態(tài)為選中狀態(tài);2、如果當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)都不是選中節(jié)點(diǎn),則繼續(xù)向該當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)向下搜索,若搜索到選中節(jié)點(diǎn)就退出搜索,并設(shè)置該當(dāng)前節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài);若沒有搜索到選中節(jié)點(diǎn),則設(shè)置該節(jié)點(diǎn)的狀態(tài)為非選中狀態(tài);3、如果當(dāng)前節(jié)點(diǎn)下的子節(jié)點(diǎn)中存在選中節(jié)點(diǎn),且個(gè)數(shù)小于該當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),則設(shè)置該當(dāng)前節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài)。優(yōu)選實(shí)施方式下,所述權(quán)限樹聯(lián)動重現(xiàn)裝置還包括:判斷模塊202,用于判斷用戶是否增加或刪除了區(qū)域?qū)ο蠡蚬δ軐ο螅?dāng)判斷模塊202判斷出用戶增加或刪除了區(qū)域?qū)ο蠡蚬δ軐ο髸r(shí),呈現(xiàn)模塊203還用于設(shè)置該節(jié)點(diǎn)的狀態(tài),包括如下處理步驟:1、當(dāng)判斷該節(jié)點(diǎn)是否為葉節(jié)點(diǎn),如果是葉節(jié)點(diǎn),則判斷該節(jié)點(diǎn)是否是選中節(jié)點(diǎn),如果是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為選中狀態(tài),如果不是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為非選中狀態(tài);如果該節(jié)點(diǎn)不為葉節(jié)點(diǎn),則依據(jù)其子節(jié)點(diǎn)的狀態(tài)情況設(shè)置該節(jié)點(diǎn)的狀態(tài):2、如果該節(jié)點(diǎn)下的子節(jié)點(diǎn)都是選中節(jié)點(diǎn),則向下搜索未選中的節(jié)點(diǎn),若搜索到未選中節(jié)點(diǎn)就退出搜索,并設(shè)置該節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài),否則,則設(shè)置該節(jié)點(diǎn)的狀態(tài)為選中狀態(tài);3、如果該節(jié)點(diǎn)的子節(jié)點(diǎn)都不是選中節(jié)點(diǎn),則繼續(xù)向該節(jié)點(diǎn)的子節(jié)點(diǎn)向下搜索,若搜索到選中節(jié)點(diǎn)就退出搜索,并設(shè)置該節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài);若沒有搜索到選中節(jié)點(diǎn),則設(shè)置該節(jié)點(diǎn)的狀態(tài)為非選中狀態(tài);4、如果該節(jié)點(diǎn)下的子節(jié)點(diǎn)中存在選中節(jié)點(diǎn),且個(gè)數(shù)小于該節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),則設(shè)置該節(jié)點(diǎn)的狀態(tài)為半選中狀態(tài)。相應(yīng)地,繼續(xù)參照圖14,本發(fā)明實(shí)施例還提供了一種權(quán)限樹聯(lián)動重現(xiàn)系統(tǒng),包括服務(wù)器10,還包括如上所述的權(quán)限樹聯(lián)動重現(xiàn)裝置20,所述裝置20包括:獲取模塊201,用于從服務(wù)器端10獲取用戶的區(qū)域權(quán)限邏輯數(shù)據(jù)或功能權(quán)限邏輯數(shù)據(jù);呈現(xiàn)模塊203,用于依據(jù)所述區(qū)域權(quán)限邏輯數(shù)據(jù)或功能權(quán)限邏輯數(shù)據(jù)呈現(xiàn)用戶權(quán)限三態(tài)樹,并從根節(jié)點(diǎn)開始遍歷并依次設(shè)置節(jié)點(diǎn)的狀態(tài),其中,呈現(xiàn)模塊203設(shè)置節(jié)點(diǎn)狀態(tài)的步驟包括:判斷當(dāng)前節(jié)點(diǎn)是否為葉節(jié)點(diǎn),如果是葉節(jié)點(diǎn),則判斷該節(jié)點(diǎn)是否是選中節(jié)點(diǎn),如果是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為選中狀態(tài),如果不是選中節(jié)點(diǎn),則將該節(jié)點(diǎn)設(shè)置為非選中狀態(tài);如果該節(jié)點(diǎn)不為葉節(jié)點(diǎn),則依據(jù)其子節(jié)點(diǎn)的狀態(tài)情況設(shè)置該節(jié)點(diǎn)的狀態(tài)。所述權(quán)限樹聯(lián)動重現(xiàn)裝置20的詳細(xì)介紹可以參加上文所述,此處不再對其重復(fù)贅述。以上所述僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。