本發(fā)明涉及權(quán)限控制領域,更具體地說,涉及一種權(quán)限校驗的方法及裝置。
背景技術(shù):
在存儲系統(tǒng)中,一種用戶可以對存儲系統(tǒng)中的某一目錄或某一文件進行什么操作,對存儲系統(tǒng)的安全十分重要,因此,權(quán)限控制是一個非常重要的環(huán)節(jié)。
權(quán)限控制可以通過acl(訪問控制列表)實現(xiàn),對單個文件或目錄以及單個用戶指定權(quán)限。通過設置acl權(quán)限的方式設置某一目錄時,需要將此目錄設置,并遍歷、設置其下所有子目錄及文件。如果想對一目錄或文件進行權(quán)限的校驗,就要等待所有子目錄及文件全部遍歷并且設置權(quán)限后才能進行校驗,然而存儲系統(tǒng)中較多為海量存儲的場景,即有數(shù)量龐大的目錄及文件,通常是萬級甚至百萬級的目錄、文件,因此當待設置權(quán)限的目錄下子目錄與文件過多時,需要等待大量時間才能完成權(quán)限的設置,然后再對某一目錄或文件進行權(quán)限校驗,造成了時間的浪費,用戶體驗極差。
因此,如何縮短權(quán)限設置時間,是本領域技術(shù)人員需要解決的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種權(quán)限校驗的方法及裝置,以縮短權(quán)限設置的時間。
為實現(xiàn)上述目的,本發(fā)明實施例提供了如下技術(shù)方案:
一種權(quán)限校驗的方法,包括:
為目標節(jié)點設置acl權(quán)限,并返回設置結(jié)果;
通過待校驗節(jié)點的acltree查找所述待校驗節(jié)點的祖先節(jié)點的acl權(quán)限;
對所述祖先節(jié)點的acl權(quán)限與所述待校驗節(jié)點的acl權(quán)限進行選擇,得到最終acl權(quán)限;
將所述最終acl權(quán)限作為所述待校驗節(jié)點的acl權(quán)限進行校驗。
其中,所述通過待校驗節(jié)點的acltree查找所述待校驗節(jié)點的祖先節(jié)點的acl權(quán)限,包括:
通過所述待校驗節(jié)點的inode節(jié)點得到所述待校驗節(jié)點的acltree節(jié)點;
通過所述待校驗節(jié)點的acltree節(jié)點得到所述祖先節(jié)點的acltree;
通過所述祖先節(jié)點的acltree得到所述祖先節(jié)點的inode節(jié)點;
從所述祖先節(jié)點的inode節(jié)點中獲取所述祖先節(jié)點的acl權(quán)限。
其中,所述通過所述待校驗節(jié)點的acltree節(jié)點得到所述祖先節(jié)點的acltree,包括:
判斷所述待校驗節(jié)點是否存在acltree;
若否,則為所述待校驗節(jié)點創(chuàng)建acltree;
若是,則通過所述待校驗節(jié)點的acltree節(jié)點得到所述祖先節(jié)點的
acltree。
其中,對所述祖先節(jié)點的acl權(quán)限與所述待校驗節(jié)點的acl權(quán)限進行選擇,得到最終acl權(quán)限,包括:
判斷所述祖先節(jié)點的acl權(quán)限與所述待校驗節(jié)點的acl權(quán)限是否一致;
若否,獲取所述祖先節(jié)點的acl權(quán)限的時間戳1與所述待校驗節(jié)點的acl權(quán)限的時間戳2;
判斷所述時間戳1是否早于所述時間戳2;
若是,則將所述待校驗節(jié)點的acl權(quán)限作為最終acl權(quán)限;
若否,則使用所述祖先節(jié)點的acl權(quán)限作為最終acl權(quán)限。
其中,所述使用所述祖先節(jié)點的acl權(quán)限對所述目標節(jié)點進行校驗之后,還包括:
將所述待校驗節(jié)點的acl權(quán)限更新為所述祖先節(jié)點的acl權(quán)限。
一種權(quán)限校驗的裝置,包括:
acl權(quán)限設置模塊,用于為目標節(jié)點設置acl權(quán)限,并返回設置結(jié)果;
祖先節(jié)點acl權(quán)限查找模塊,用于通過待校驗節(jié)點的acltree查找所述待校驗節(jié)點的祖先節(jié)點的acl權(quán)限;
最終權(quán)限確定模塊,用于對所述祖先節(jié)點的acl權(quán)限與所述待校驗節(jié)點的acl權(quán)限進行選擇,得到最終acl權(quán)限;
校驗模塊,用于將所述最終acl權(quán)限作為所述待校驗節(jié)點的acl權(quán)限進行校驗。
其中,所述祖先節(jié)點acl權(quán)限查找模塊,包括:
待校驗節(jié)點acltree節(jié)點獲取單元,用于通過所述待校驗節(jié)點的inode節(jié)點得到所述待校驗節(jié)點的acltree節(jié)點;
祖先節(jié)點的acltree獲取單元,用于通過所述待校驗節(jié)點的acltree節(jié)點得到所述祖先節(jié)點的acltree;
祖先節(jié)點inode節(jié)點獲取單元,用于通過所述祖先節(jié)點的acltree得到所述祖先節(jié)點的inode節(jié)點;
祖先節(jié)點acl權(quán)限獲取單元,用于從所述祖先節(jié)點的inode節(jié)點中獲所述祖先節(jié)點的acl權(quán)限。
其中,所述祖先節(jié)點的acltree獲取單元,包括:
判斷子單元,用于判斷所述待校驗節(jié)點是否存在acltree,若否,則調(diào)用acltree創(chuàng)建子單元,若是,則調(diào)用祖先節(jié)點acltree獲取子單元;
所述acltree創(chuàng)建子單元,用于為所述待校驗節(jié)點創(chuàng)建acltree;
所述祖先節(jié)點acltree獲取子單元,用于通過所述待校驗節(jié)點的
acltree節(jié)點得到所述祖先節(jié)點的acltree。
其中,所述校驗模塊,包括:
第一判斷單元,用于判斷所述祖先節(jié)點的acl權(quán)限與所述待校驗節(jié)點的acl權(quán)限是否一致,若否,調(diào)用時間戳獲取單元;
所述時間戳獲取單元,用于獲取所述祖先節(jié)點的acl權(quán)限的時間戳1與所述待校驗節(jié)點的acl權(quán)限的時間戳2;
第二判斷單元,用于判斷時間戳1是否早于時間戳2,若是,則將所述待校驗節(jié)點的acl權(quán)限作為最終acl權(quán)限;若否,則使用所述祖先節(jié)點的
acl權(quán)限作為最終acl權(quán)限。
其中,校驗模塊還包括:
acl權(quán)限更新單元,用于將所述待校驗節(jié)點的acl權(quán)限更新為所述祖先節(jié)點的acl權(quán)限。
本發(fā)明提供的一種權(quán)限校驗的方法,為目標節(jié)點設置acl權(quán)限,并返回設置結(jié)果;通過待校驗節(jié)點的acltree查找所述待校驗節(jié)點的祖先節(jié)點的acl權(quán)限;對所述祖先節(jié)點的acl權(quán)限與所述待校驗節(jié)點的acl權(quán)限進行選擇,得到最終acl權(quán)限;將所述最終acl權(quán)限作為所述待校驗節(jié)點的
acl權(quán)限進行校驗。
由此可見,本發(fā)明提供的一種權(quán)限校驗的方法,只需要對待設置acl權(quán)限的目標節(jié)點進行權(quán)限設置,通過acltree找到這些子目錄的祖先節(jié)點的權(quán)限作為子目錄的權(quán)限進行校驗,而不需要對其下層的所有子目錄或文件進行遍歷、設置acl權(quán)限,因此設置acl權(quán)限的時間有了明顯縮短,用戶體驗也有了明顯的改善。同時本發(fā)明通過使用選擇祖先節(jié)點acl權(quán)限或待校驗節(jié)點的acl權(quán)限對待校驗節(jié)點進行權(quán)限校驗,不會影響目標目錄的子目錄或文件的正常權(quán)限校驗的結(jié)果。本發(fā)明還提供一種權(quán)限校驗的裝置,同樣可以實現(xiàn)上述技術(shù)效果。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例公開的一種權(quán)限設置的方法流程圖;
圖2為本發(fā)明實施例公開的一種具體的權(quán)限設置的方法流程圖;
圖3為本發(fā)明實施例公開的一種具體的權(quán)限設置的方法流程圖;
圖4為本發(fā)明實施例公開的一種權(quán)限設置的裝置結(jié)構(gòu)示意圖;
圖5為本發(fā)明實施例公開的一種具體的權(quán)限設置的裝置結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例公開了一種權(quán)限設置的方法,以縮短權(quán)限設置的時間。
參照圖1,本發(fā)明實施例提供的一種權(quán)限設置的方法,包括:
s101,為目標節(jié)點設置acl權(quán)限,并返回設置結(jié)果。
具體地,用戶通過客戶端發(fā)起為目標節(jié)點設置acl權(quán)限的操作,目標節(jié)點的acl權(quán)限設置完成后立即向客戶端返回設置結(jié)果,不再進行對其子節(jié)點的權(quán)限的設置。需要說明的是,本方案中將需要設置acl權(quán)限的節(jié)點作為目標節(jié)點,例如該節(jié)點可以為根節(jié)點或者根節(jié)點下的任意一個子節(jié)點。
s102,通過待校驗節(jié)點的acltree查找所述待校驗節(jié)點的祖先節(jié)點的acl權(quán)限。
在本方案中設置某一節(jié)點的acl權(quán)限后,不再遍歷及設置其子目錄或文件的acl權(quán)限,而其子目錄或文件的實際acl權(quán)限應隨著這個節(jié)點acl權(quán)限的更新而更新。例如在目錄a下有目錄b和文件f,當使用本方案對a目錄進行acl權(quán)限設置時,只需要對a本身進行權(quán)限的設置,不需要對目錄b和文件f進行遍歷設置acl權(quán)限,但此時b、f擁有的acl權(quán)限為a的acl權(quán)限。因此,當需要校驗此節(jié)點的子目錄的或文件的權(quán)限時,需要將此節(jié)點的acl權(quán)限作為子節(jié)點或文件的權(quán)限進行校驗。其中這個節(jié)點相對于其子節(jié)點或文件來說是祖先節(jié)點。
需要說明的是,待校驗節(jié)點中有acltree結(jié)構(gòu),校驗一個節(jié)點的權(quán)限時,可以通過其acltree查找到其祖先節(jié)點,并獲取得到祖先節(jié)點的acl權(quán)限。
s103,對所述祖先節(jié)點的acl權(quán)限與所述待校驗節(jié)點的acl權(quán)限進行選擇,得到最終acl權(quán)限。
需要說明的是,待校驗節(jié)點和其祖先節(jié)點可能都作為目標節(jié)點進行過acl權(quán)限的設置,比如節(jié)點a/b/c/file,第一次為a進行權(quán)限的設置,設置權(quán)限為q1,則此時a下所有節(jié)點均有q1權(quán)限,但為了降低用戶對file的使用權(quán)限,將file的權(quán)限進一步進行設置為q2,使其權(quán)限更小,此時,對file進行權(quán)限校驗時,則不能通過其祖先節(jié)點的權(quán)限進行校驗,而是通過自己的acl權(quán)限進行校驗。相反,如果file先設置了權(quán)限q2,之后將a節(jié)點進行更新,使其擁有較大權(quán)限的q1,此時a節(jié)點下所有節(jié)點均更新為q1權(quán)限,file也被更新為了q1權(quán)限,此時就不能直接用file的權(quán)限進行校驗,而是需要獲得到它的祖先目錄的acl權(quán)限進行校驗。
因此,需要在待校驗節(jié)點的acl權(quán)限與其祖先節(jié)點的acl權(quán)限中選擇出一個acl權(quán)限作為最終acl權(quán)限。
s104,將所述最終acl權(quán)限作為所述待校驗節(jié)點的acl權(quán)限進行校驗。
具體地,將通過上一步驟選擇后確定的最終acl權(quán)限作為待校驗節(jié)點的acl權(quán)限進行校驗。由此可見,本發(fā)明提供的一種權(quán)限設置的方法,只需要對待設置acl權(quán)限的目標節(jié)點進行權(quán)限設置,而不需要對其下層的所有子目錄或文件進行遍歷、設置acl權(quán)限,因此設置acl權(quán)限的時間有了明顯縮短,用戶體驗也有了明顯的改善。同時本發(fā)明通過使用選擇祖先節(jié)點acl權(quán)限或待校驗節(jié)點的acl權(quán)限對待校驗節(jié)點進行權(quán)限校驗,不會影響目標目錄的子目錄或文件的正常權(quán)限校驗的結(jié)果。
本發(fā)明實施例提供一種具體的權(quán)限設置的方法,區(qū)別于上一實施例,本發(fā)明實施例對上一實施例的s102做了具體地限定,參照圖2,s102具體包括:
s102a,通過所述待校驗節(jié)點的inode節(jié)點得到所述待校驗節(jié)點的acltree節(jié)點。
需要說明的是,每一個節(jié)點中有一個inode節(jié)點,inode節(jié)點中保存著這個節(jié)點的信息,其中包括權(quán)限信息和與這個inode節(jié)點對應的acltree節(jié)點,因此通過對待校驗節(jié)點進行操作,得到待校驗節(jié)點的inode節(jié)點,就可以從inode節(jié)點中獲得到待校驗節(jié)點的acltree節(jié)點。
s102b,通過所述待校驗節(jié)點的acltree節(jié)點得到所述祖先節(jié)點的acltree。
需要說明的是,acltree結(jié)構(gòu)中保存著距離此待校驗節(jié)點最近的設置過acl權(quán)限的acltree的指針,因此在本方案中可以通過待校驗節(jié)點的acltree節(jié)點找到其設置過acl權(quán)限的祖先節(jié)點的acltree。
s102c,通過所述祖先節(jié)點的acltree得到所述祖先節(jié)點的inode節(jié)點。
需要說明的是,每個節(jié)點的acltree結(jié)構(gòu)與這個節(jié)點的inode節(jié)點對應,因此通過祖先節(jié)點的acltree可以得到祖先節(jié)點的inode節(jié)點。
s103d,從所述祖先節(jié)點的inode節(jié)點中獲取所述祖先節(jié)點的acl權(quán)限。
具體地,由于一個節(jié)點inode節(jié)點中保存著這個節(jié)點的acl權(quán)限信息,因此可以從祖先節(jié)點的inode節(jié)點中獲取祖先節(jié)點的acl權(quán)限。
因此,本發(fā)明提供的一種權(quán)限校驗的方法,只需要對待設置acl權(quán)限的目標節(jié)點進行權(quán)限設置,而不需要對其下層的所有子目錄或文件進行遍歷、設置acl權(quán)限,因此設置acl權(quán)限的時間有了明顯縮短,用戶體驗也有了明顯的改善。同時,校驗設置acl權(quán)限后的目標目錄的子目錄權(quán)限時,通過目錄的acltree的指針找到祖先目錄的acltree,最終通過祖先目錄的acltree得到祖先目錄的inode節(jié)點,將inode節(jié)點中祖先目錄的權(quán)限作為祖先目錄下的子目錄的權(quán)限進行校驗,因此,本方法縮短權(quán)限設置時間的同時,不影響權(quán)限的校驗結(jié)果。
本發(fā)明實施例提供一種具體的權(quán)限校驗的方法,區(qū)別于上述實施例,本發(fā)明實施例對s102b做了具體地限定,其他內(nèi)容與上一實施例大致相同,具體內(nèi)容可以參照上一實施例,此處不再贅述。具體地,s102b包括:
判斷所述待校驗節(jié)點是否存在acltree;
若否,則為所述待校驗節(jié)點創(chuàng)建acltree;
若是,則通過所述待校驗節(jié)點的acltree節(jié)點得到所述祖先節(jié)點的acltree。
通過本方案校驗節(jié)點的權(quán)限時,需要為每個節(jié)點創(chuàng)建一個acltree結(jié)構(gòu),以便通過這個節(jié)點的acltree查找到其設置過acl權(quán)限的祖先節(jié)點,如果這個節(jié)點已經(jīng)有acltree結(jié)構(gòu),則可以直接使用,不需要再次創(chuàng)建。
具體地,首先判斷待校驗節(jié)點是否已有acltree,如果沒有需要先為其創(chuàng)建acltree。需要說明的是,在實際設置過程中,在設置了acl權(quán)限的節(jié)點中添加標志v=1,未設置的節(jié)點中標志v=0。
當校驗節(jié)點的權(quán)限時,沿著節(jié)點的路徑對各個節(jié)點依次壓棧,每一次壓棧都會彈出此次壓棧的節(jié)點的inode節(jié)點,inode節(jié)點中有此待校驗節(jié)點的權(quán)限信息以及標志位信息。例如節(jié)點為a/b/c/file,沿著其路徑file->c->b->a的順序進行壓棧,并且在每次壓棧時彈出對應節(jié)點的inode節(jié)點,判斷這個節(jié)點標志位v是否為1,例如a的標志未若為1,則說明a為設置過acl權(quán)限的節(jié)點,將其作為祖先節(jié)點,判斷其是否已有acltree結(jié)構(gòu),如果沒有,則在對上為a創(chuàng)建一個acltree對象。繼續(xù)壓棧到file,并為file創(chuàng)建acltree對象。需要說明的是,每個acltree中保存著指向距離其最近的設置過acl屬性的上層節(jié)點的acltree的指針,比如,file的acltree中保存著指向a的acltree的指針。
如果待校驗節(jié)點已有acltree則直接通過所述待校驗節(jié)點的acltree節(jié)點得到所述祖先節(jié)點的acltree。
由于權(quán)限的校驗是從上至下校驗,指針指向的設置過acl權(quán)限的節(jié)點為此待校驗節(jié)點的上層節(jié)點,即祖先節(jié)點。下次獲取這個節(jié)點的權(quán)限時,可以直接通過指針獲取祖先節(jié)點的權(quán)限。
需要說明的是,當待校驗節(jié)點的上層節(jié)點的acl權(quán)限發(fā)生變化時,需要對上層節(jié)點對應的acltree節(jié)點析構(gòu),并將此上層節(jié)點作為其下層節(jié)點的祖先的指向,重新賦值為空,再一次校驗此上層節(jié)點的下層節(jié)點時,重新按照本實施例的方法重新壓棧找到最新的有效的acl權(quán)限。
本發(fā)明實施例提供的方法通過為節(jié)點分配acltree并在節(jié)點中保存一個指向設置過acl權(quán)限的最近的祖先節(jié)點的acltree,因此再設置acl權(quán)限時,只需設置某一目錄的acl權(quán)限,若校驗其子目錄的acl權(quán)限,便可以通過指針找到已設置acl權(quán)限的祖先目錄,使用祖先目錄的權(quán)限進行校驗,這樣既節(jié)省了權(quán)限設置的時間,即只需要設置目標目錄的權(quán)限而不需要對其子目錄設置,同時也不影響子目錄權(quán)限的使用以及校驗。
本發(fā)明實施例提供了一種具體的權(quán)限設置的方法,區(qū)別于上述實施例,本發(fā)明實施例對上述實施例的s103做了進一步的限定,其他步驟內(nèi)容與上述實施例大致相同,具體內(nèi)容可以參照上述實施例,此處不再贅述。參照圖3,具體地s103包括:
s103a,判斷所述祖先節(jié)點的acl權(quán)限與所述待校驗節(jié)點的acl權(quán)限是否一致。
具體地,待校驗節(jié)點可能已有acl權(quán)限,當待校驗節(jié)點設有acl權(quán)限時,首先判斷待校驗節(jié)點的現(xiàn)有的acl權(quán)限與其祖先目錄的acl權(quán)限是否一致,如果一致,則可以將現(xiàn)有acl權(quán)限進行校驗。
s103b,若否,獲取所述祖先節(jié)點的acl權(quán)限的時間戳1與所述待校驗節(jié)點的acl權(quán)限的時間戳2;
具體地,如果待校驗節(jié)點的現(xiàn)有的acl權(quán)限與其祖先目錄的acl權(quán)限不一致,需要將最新的權(quán)限作為待校驗節(jié)點的權(quán)限進行校驗,則需要獲取兩個節(jié)點設置acl權(quán)限的時間戳,根據(jù)兩個acl權(quán)限設置的時間,判斷出哪一個節(jié)點的acl權(quán)限為最新的。
s103c,判斷所述時間戳1是否早于所述時間戳2;
s103d,若是,則將所述待校驗節(jié)點的acl權(quán)限作為最終acl權(quán)限;
具體地,如果時間戳1早于時間戳2,則說明設置祖先節(jié)點的acl權(quán)限的時間早于設置待校驗節(jié)點的現(xiàn)有的acl權(quán)限的時間,因此說明待校驗節(jié)點的acl權(quán)限為最新設置的,所以將其作為最終acl權(quán)限進行校驗。
s103e,若否,則使用所述祖先節(jié)點的acl權(quán)限作為最終acl權(quán)限。
具體地,如果時間戳1不早于時間戳2,則說明待校驗節(jié)點的現(xiàn)有的acl權(quán)限的時間早于設置祖先節(jié)點的acl權(quán)限的時間,因此說明祖先節(jié)點的acl權(quán)限為最新設置的,所以將其作為最終acl權(quán)限進行校驗。
本發(fā)明實施例為了減少校驗的時間,提供了一種具體的權(quán)限設置的方法,基于上述實施例,本實施例在使用所述祖先節(jié)點的acl權(quán)限對所述目標節(jié)點進行校驗之后,還包括:
將所述待校驗節(jié)點的acl權(quán)限更新為所述祖先節(jié)點的acl權(quán)限。
具體地,使用上述實施例的方法確定出最終acl權(quán)限后,如果待校驗節(jié)點此時有acl權(quán)限且與祖先節(jié)點的acl權(quán)限不一致,則需要將此權(quán)限與其祖先節(jié)點的acl權(quán)限進行時間的判斷,確定最終的acl權(quán)限,為了避免再次校驗此待校驗節(jié)點時,還需重新進行判斷,可以直接將待校驗節(jié)點權(quán)限設置為祖先目錄的權(quán)限,此時,兩個節(jié)點權(quán)限一樣,如果沒有再次對這兩個節(jié)點的權(quán)限更新,則不需要再次判斷兩個權(quán)限設置的時間。
下面對本發(fā)明實施例提供的一種權(quán)限設置的裝置進行介紹,下文描述的一種權(quán)限設置的裝置與上文描述的一種權(quán)限設置的方法可以相互參照。
參見圖4,本發(fā)明實施例提供的一種權(quán)限設置的裝置,具體包括:
acl權(quán)限設置模塊201,用于為目標節(jié)點設置acl權(quán)限,并返回設置結(jié)果。
具體地,acl權(quán)限設置模塊201為目標節(jié)點設置acl權(quán)限,目標節(jié)點的acl權(quán)限設置完成后立即向客戶端返回設置結(jié)果,不再進行對其子節(jié)點的權(quán)限的設置。需要說明的是,本方案中將需要設置acl權(quán)限的節(jié)點作為目標節(jié)點,例如該節(jié)點可以為根節(jié)點或者根節(jié)點下的任意一個子節(jié)點。
祖先節(jié)點acl權(quán)限查找模塊202,用于通過待校驗節(jié)點的acltree查找所述待校驗節(jié)點的祖先節(jié)點的acl權(quán)限;
在本方案中設置某一節(jié)點的acl權(quán)限后,不再遍歷及設置其子目錄或文件的acl權(quán)限,而其子目錄或文件的實際acl權(quán)限應隨著這個節(jié)點acl權(quán)限的更新而更新。例如在目錄a下有目錄b和文件f,當使用本方案對a目錄進行acl權(quán)限設置時,只需要對a本身進行權(quán)限的設置,不需要對目錄b和文件f進行遍歷設置acl權(quán)限,但此時b、f擁有的acl權(quán)限為a的acl權(quán)限。因此,當需要校驗此節(jié)點的子目錄的或文件的權(quán)限時,需要將此節(jié)點的acl權(quán)限作為子節(jié)點或文件的權(quán)限進行校驗。其中這個節(jié)點相對于其子節(jié)點或文件來說是祖先節(jié)點。
需要說明的是,待校驗節(jié)點中有acltree結(jié)構(gòu),校驗一個節(jié)點的權(quán)限時,可以通過其acltree查找到其祖先節(jié)點,并獲取得到祖先節(jié)點的acl權(quán)限。
最終權(quán)限確定模塊203,用于對所述祖先節(jié)點的acl權(quán)限與所述待校驗節(jié)點的acl權(quán)限進行選擇,得到最終acl權(quán)限。
需要說明的是,待校驗節(jié)點和其祖先節(jié)點可能都作為目標節(jié)點進行過acl權(quán)限的設置,比如節(jié)點a/b/c/file,第一次為a進行權(quán)限的設置,設置權(quán)限為q1,則此時a下所有節(jié)點均有q1權(quán)限,但為了降低用戶對file的使用權(quán)限,將file的權(quán)限進一步進行設置為q2,使其權(quán)限更小,此時,對file進行權(quán)限校驗時,則不能通過其祖先節(jié)點的權(quán)限進行校驗,而是通過自己的acl權(quán)限進行校驗。相反,如果file先設置了權(quán)限q2,之后將a節(jié)點進行更新,使其擁有較大權(quán)限的q1,此時a節(jié)點下所有節(jié)點均更新為q1權(quán)限,file也被更新為了q1權(quán)限,此時就不能直接用file的權(quán)限進行校驗,而是需要獲得到它的祖先目錄的acl權(quán)限進行校驗。
因此需要最終權(quán)限確定模塊203在待校驗節(jié)點的acl權(quán)限與其祖先節(jié)點的acl權(quán)限中選擇出一個acl權(quán)限作為最終acl權(quán)限。
校驗模塊204,用于將所述最終acl權(quán)限作為所述待校驗節(jié)點的acl權(quán)限進行校驗。
具體地,校驗模塊204將將通過上一步驟選擇后確定的最終acl權(quán)限作為待校驗節(jié)點的acl權(quán)限進行校驗。
由此可見,本發(fā)明提供的一種權(quán)限設置的裝置,只需要由acl權(quán)限設置模塊201對待設置acl權(quán)限的目標節(jié)點進行權(quán)限設置,而不需要對其下層的所有子目錄或文件進行遍歷、設置acl權(quán)限,因此設置acl權(quán)限的時間有了明顯縮短,用戶體驗也有了明顯的改善。同時本發(fā)明通過使用祖先節(jié)點acl權(quán)限查找模塊202選擇祖先節(jié)點acl權(quán)限或待校驗節(jié)點的acl權(quán)限對待校驗節(jié)點進行權(quán)限校驗,不會影響目標目錄的子目錄或文件的正常權(quán)限校驗的結(jié)果。
本發(fā)明實施例提供了一種具體的權(quán)限校驗的裝置,區(qū)別于上一實施例,本發(fā)明實施例對祖先節(jié)點acl權(quán)限查找模塊202做了具體限定,其他內(nèi)容與上一實施例內(nèi)容大致相同,具體內(nèi)容可以參照上述實施例相應部分,此處不再贅述。具體地,參照圖5,祖先節(jié)點acl權(quán)限查找模塊202包括:
待校驗節(jié)點acltree節(jié)點獲取單元202a,用于通過所述待校驗節(jié)點的inode節(jié)點得到所述待校驗節(jié)點的acltree節(jié)點。
需要說明的是,每一個節(jié)點中有一個inode節(jié)點,inode節(jié)點中保存著這個節(jié)點的信息,其中包括權(quán)限信息和與這個inode節(jié)點對應的acltree節(jié)點,因此待校驗節(jié)點acltree節(jié)點獲取單元202a通過對待校驗節(jié)點進行操作,得到待校驗節(jié)點的inode節(jié)點,就可以從inode節(jié)點中獲得到待校驗節(jié)點的acltree節(jié)點。
祖先節(jié)點的acltree獲取單元202b,用于通過所述待校驗節(jié)點的acltree節(jié)點得到所述祖先節(jié)點的acltree。
具體地,祖先節(jié)點的acltree獲取單元202b通過待校驗節(jié)點的acltree節(jié)點找到祖先節(jié)點的acltree。需要說明的是,acltree結(jié)構(gòu)中保存著距離此待校驗節(jié)點最近的設置過acl權(quán)限的acltree的指針,因此可以通過待校驗節(jié)點的acltree節(jié)點找到其設置過acl權(quán)限的祖先節(jié)點的acltree。
祖先節(jié)點inode節(jié)點獲取單元202c,用于通過所述祖先節(jié)點的acltree得到所述祖先節(jié)點的inode節(jié)點。
需要說明的是,acltree結(jié)構(gòu)與inode節(jié)點對應,因此祖先節(jié)點inode節(jié)點獲取單元202c通過祖先節(jié)點的acltree可以得到祖先節(jié)點的inode節(jié)點。
祖先節(jié)點acl權(quán)限獲取單元202d,用于從所述祖先節(jié)點的inode節(jié)點中獲所述祖先節(jié)點的acl權(quán)限。
具體地,inode節(jié)點中保存著節(jié)點的acl權(quán)限,因此祖先節(jié)點acl權(quán)限獲取單元202d從祖先節(jié)點的inode節(jié)點中獲取所述祖先節(jié)點的acl權(quán)限。
因此,本發(fā)明提供的一種權(quán)限校驗的方法,,只需要對待設置acl權(quán)限的目標節(jié)點進行權(quán)限設置,而不需要對其下層的所有子目錄或文件進行遍歷、設置acl權(quán)限,因此設置acl權(quán)限的時間有了明顯縮短,用戶體驗也有了明顯的改善。同時,校驗設置acl權(quán)限后的目標目錄的子目錄權(quán)限時,通過目錄的acltree的指針找到祖先目錄的acltree,最終祖先節(jié)點acl權(quán)限獲取單元202d通過祖先目錄的acltree得到祖先目錄的inode節(jié)點,將inode節(jié)點中祖先目錄的權(quán)限作為祖先目錄下的子目錄的權(quán)限進行校驗,因此,本方法縮短權(quán)限設置時間的同時,不影響權(quán)限的校驗結(jié)果。。
本發(fā)明實施例提供一種具體的權(quán)限校驗的裝置,區(qū)別與上一實施例,本發(fā)明實施例對祖先節(jié)點的acltree獲取單元202b做了具體地限定,其他內(nèi)容與上一實例大致相同,此處不再贅述。具體地,祖先節(jié)點的acltree獲取單元202b包括:
判斷子單元,用于判斷所述待校驗節(jié)點是否存在acltree,若否,則調(diào)用acltree創(chuàng)建子單元,若是,則調(diào)用祖先節(jié)點acltree獲取子單元;
所述acltree創(chuàng)建子單元,用于為所述待校驗節(jié)點創(chuàng)建acltree;
所述祖先節(jié)點acltree獲取子單元,用于通過所述待校驗節(jié)點的acltree節(jié)點得到所述祖先節(jié)點的acltree。
通過本方案校驗節(jié)點的權(quán)限時,需要為每個節(jié)點創(chuàng)建一個acltree結(jié)構(gòu),以便通過這個節(jié)點的acltree查找到其設置過acl權(quán)限的祖先節(jié)點,如果這個節(jié)點已經(jīng)有acltree結(jié)構(gòu),則可以直接使用,不需要再次創(chuàng)建。
具體地,首先通過判斷子單元判斷待校驗節(jié)點是否已有acltree,如果沒有則需要為其創(chuàng)建一個acltree對象。需要說明的是,在實際設置過程中,在設置了acl權(quán)限的節(jié)點中添加標志v=1,未設置的節(jié)點中標志v=0。
當校驗節(jié)點的權(quán)限時,沿著節(jié)點的路徑對各個節(jié)點依次壓棧,每一次壓棧都會彈出此次壓棧的節(jié)點的inode節(jié)點,inode節(jié)點中有此待校驗節(jié)點的權(quán)限信息以及標志位信息。例如節(jié)點為a/b/c/file,沿著其路徑file->c->b->a的順序進行壓棧,并且在每次壓棧時彈出對應節(jié)點的inode節(jié)點,判斷這個節(jié)點標志位v是否為1,例如a的標志未若為1,則說明a為設置過acl權(quán)限的節(jié)點,將其作為祖先節(jié)點,判斷其是否已有acltree結(jié)構(gòu),如果沒有,則通過acltree創(chuàng)建子單元在對上為a創(chuàng)建一個acltree對象。繼續(xù)壓棧到file,并通過acltree創(chuàng)建子單元為file創(chuàng)建acltree對象。需要說明的是,每個acltree中保存著指向距離其最近的設置過acl屬性的上層節(jié)點的acltree的指針,比如,file的acltree中保存著指向a的acltree的指針。
如果待校驗節(jié)點已有acltree則直接通過所述待校驗節(jié)點的acltree節(jié)點得到所述祖先節(jié)點的acltree。
這個acltree與待校驗節(jié)點的inode節(jié)點對應,并且保存著指向最近的設置過acl權(quán)限的上層節(jié)點的指針;如果待校驗節(jié)點已有acltree,則直接從acltree中找到其祖先節(jié)點,并將祖先節(jié)點的acl權(quán)限作為待校驗節(jié)點的acl權(quán)限進行校驗。
需要說明的是,當待校驗節(jié)點的上層節(jié)點的acl權(quán)限發(fā)生變化時,需要對上層節(jié)點對應的acltree節(jié)點析構(gòu),并將此上層節(jié)點作為其下層節(jié)點的祖先的指向,重新賦值為空,再一次校驗此上層節(jié)點的下層節(jié)點時,重新找到最新的有效的acl權(quán)限。
本發(fā)明實施例提供的方法通過acltree創(chuàng)建子單元為節(jié)點分配acltree并在節(jié)點中保存一個指向設置過acl權(quán)限的最近的祖先節(jié)點的acltree,因此再設置acl權(quán)限時,只需設置某一目錄的acl權(quán)限,若校驗其子目錄的acl權(quán)限,便可以通過指針找到已設置acl權(quán)限的祖先目錄,使用祖先目錄的權(quán)限進行校驗,這樣既節(jié)省了權(quán)限設置的時間,即只需要設置目標目錄的權(quán)限而不需要對其子目錄設置,同時也不影響子目錄權(quán)限的使用以及校驗。
本發(fā)明實施例提供了一種具體的權(quán)限設置的裝置,區(qū)別于上述實施例,本發(fā)明實施例對上述實施例的最終權(quán)限確定模塊203做了具體地限定,其他內(nèi)容與上述實施例的內(nèi)容大致相同,對應部分可以參照上述實施例,此處不再贅述,具體地,最終權(quán)限確定模塊203包括:
第一判斷單元203a,用于判斷所述祖先節(jié)點的acl權(quán)限與所述待校驗節(jié)點的acl權(quán)限是否一致,若否,調(diào)用時間戳獲取單元。
具體地,待校驗節(jié)點可能已有acl權(quán)限,當待校驗節(jié)點設有acl權(quán)限時,第一判斷單元203a首先判斷待校驗節(jié)點的現(xiàn)有的acl權(quán)限與其祖先目錄的acl權(quán)限是否一致,如果一致,則可以將現(xiàn)有acl權(quán)限進行校驗。
所述時間戳獲取單元203b,用于獲取所述祖先節(jié)點的acl權(quán)限的時間戳1與所述待校驗節(jié)點的acl權(quán)限的時間戳2。
具體地,如果待校驗節(jié)點的現(xiàn)有的acl權(quán)限與其祖先目錄的acl權(quán)限不一致,需要將最新的權(quán)限作為待校驗節(jié)點的權(quán)限進行校驗,則需要獲取兩個節(jié)點設置acl權(quán)限的時間戳,根據(jù)兩個acl權(quán)限設置的時間,判斷出哪一個節(jié)點的acl權(quán)限為最新的。
第二判斷單元203c,用于判斷時間戳1是否早于時間戳2,若是,則將所述待校驗節(jié)點的acl權(quán)限作為最終acl權(quán)限;若否,則使用所述祖先節(jié)點的acl權(quán)限作為最終acl權(quán)限。
具體地,第二判斷單元203c判斷時間戳1是否早于時間戳2,也就是說,判斷哪一個節(jié)點的acl權(quán)限是最新設置的。
如果時間戳1早于時間戳2,則說明設置祖先節(jié)點的acl權(quán)限的時間早于設置待校驗節(jié)點的現(xiàn)有的acl權(quán)限的時間,因此說明待校驗節(jié)點的acl權(quán)限為最新設置的,所以將其作為最終acl權(quán)限進行校驗。如果時間戳1不早于時間戳2,則說明待校驗節(jié)點的現(xiàn)有的acl權(quán)限的時間早于設置祖先節(jié)點的acl權(quán)限的時間,因此說明祖先節(jié)點的acl權(quán)限為最新設置的,所以將其作為最終acl權(quán)限進行校驗。
本發(fā)明實施例為了減少校驗的時間,提供了一種具體的權(quán)限設置的裝置,基于上述實施例,本實施基于校驗模塊204,還包括:
acl權(quán)限更新單元,用于將所述待校驗節(jié)點的acl權(quán)限更新為所述祖先節(jié)點的acl權(quán)限。
具體地,使用上述實施例的裝置確定出最終acl權(quán)限后,如果待校驗節(jié)點此時有acl權(quán)限且與祖先節(jié)點的acl權(quán)限不一致,則需要將此權(quán)限與其祖先節(jié)點的acl權(quán)限進行時間的判斷,確定最終的acl權(quán)限,為了避免再次校驗此待校驗節(jié)點時,還需重新進行判斷,可以直接將待校驗節(jié)點權(quán)限設置為祖先目錄的權(quán)限,此時,兩個節(jié)點權(quán)限一樣,如果沒有再次對這兩個節(jié)點的權(quán)限更新,則不需要再次判斷兩個權(quán)限設置的時間。
本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。
對所公開的實施例的上述說明,使本領域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。