




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、權(quán)限系統(tǒng)這一天將講述一個(gè)基本的基于數(shù)據(jù)庫(kù)的權(quán)限管理系統(tǒng)的設(shè)計(jì),在這一天的課程的最后將講述“左右值無(wú)限分類實(shí)現(xiàn)算法”如何來(lái)優(yōu)化“系統(tǒng)菜單”的結(jié)構(gòu)而告終。今天的內(nèi)容和前幾天的基礎(chǔ)框架是一樣的它們都屬于基礎(chǔ)知識(shí),在這些基礎(chǔ)知識(shí)上還可以擴(kuò)展出無(wú)數(shù)的變種與進(jìn)化設(shè)計(jì)。二、先來(lái)看客戶的一個(gè)需求2.1 用戶實(shí)際需求1. 所有的用戶、角色可動(dòng)態(tài)配置2. 所有的系統(tǒng)菜單的權(quán)限要求具體到“增,刪,改、查、打印、導(dǎo)出”這樣的小權(quán)限的設(shè)計(jì)3. 所有的權(quán)限基于角色來(lái)進(jìn)行劃分和判斷4. 一個(gè)用戶可能屬于多個(gè)角色5. 系統(tǒng)菜單也能夠動(dòng)態(tài)的“增、刪、改、查”2.2 系統(tǒng)權(quán)限菜單樣例0月報(bào)LJ宥艮狂報(bào)ej穆管理期戶霞Ll新增用戶
2、J刪除用戶角色管理|新增角色避除角色三、基于數(shù)據(jù)庫(kù)的系統(tǒng)權(quán)限表設(shè)計(jì)3.1ER(EntityRelationship)圖圍繞上述需求,我們可以在數(shù)據(jù)庫(kù)內(nèi)進(jìn)行如下的表設(shè)計(jì),下面直接給出ER圖:T_fflENlT_PRIVILEGEPKIDFjmW期(Cuk)"RQLE.ID¥AKCHAE2(i6)三疝Tkl7HENU_IDfJlTMBEF(t6):訊近"PRIVILEGE,IDCHAR辿仙23TOPRIVFKEOLETOPR0寇mVILECETYFTOPIUFKTMEIIUmMEl'WLESCR'MENUUKL崛UJP3.2表關(guān)系詳解上述設(shè)計(jì)有6張表,
3、其中:T_USER_ROLEUSERID霞mCHAR?(16)Sk.仙»/比111AfCHAREUR)£uk'士'k2>FR.USER_IDT_USERS此EJOD訃TFUm。】生klFA35WCmDCHARC6)7SER_NAMETAR匚段*11第T_User表用于存放用戶信息,此處只存放基礎(chǔ)信息USEHJDPASSWORD;;USER_NAME卜1Tcnnyafocdefg2Saniriyobcdefg3S叫ofacdefg4Jirnabcdefg5Danielafccdefg6Andyabcdefg7Shav/natocdefg|T_Role表用
4、于存放系統(tǒng)角色信息ROLEJDusermanagergmanageradminROLE_DESCR普通用戶二部門經(jīng)理一二老總,IT管理部T_User_Role表用于存放系統(tǒng)用戶與角色的匹配關(guān)系USER_ID(ROLEJDROWID11TorinyTuser2Samm/,user3DanielTmanager4JimadminED&nzel*T_Sys_Menu表這張就是用于存放系統(tǒng)菜單的表了,這張表的設(shè)計(jì)主要使用了如下的表設(shè)計(jì)技巧:JMENLLDESCRMENU.URLMEN"lD1101報(bào)表查詢Q2102月報(bào)ri1013103季報(bào)-»x.dowi-4104年報(bào)-x
5、xx.do1015105系統(tǒng)管理-0g106用戶管理1057107新噌用戶-addJser.dci,106a108刪除用尸-delUser.do-1069109角色管理丁W510110新噌角色riaddRole”109ii111刪除角色-delRole109注意這邊的MENU_IDWmenu_pid如果這個(gè)菜單項(xiàng)是一級(jí)菜單,那么我們把它的MENU_PI段為0如果這個(gè)菜單是另一個(gè)菜單的子菜單,那么我們就把它的MENU_PI改為它的父菜單的MENU_ID有了這樣的結(jié)構(gòu),我們一個(gè)遞歸就能把這顆“樹”顯示出來(lái)了,是不是?此處以O(shè)racle數(shù)據(jù)庫(kù)為例,不使用遞歸,直接把樹形結(jié)構(gòu)在數(shù)據(jù)庫(kù)中就造型造好(當(dāng)然
6、,還有更好的方法如:有人喜歡設(shè)level或者是deep這樣的字段來(lái)簡(jiǎn)化程序解析樹型結(jié)構(gòu)菜單,稍后我們會(huì)來(lái)講一個(gè)根本不需要用遞歸的樹型菜單的設(shè)計(jì)來(lái)最大程度優(yōu)化設(shè)計(jì)。)顯示整顆樹型菜單結(jié)構(gòu)的Oracle語(yǔ)句:SELECT*FROMT_SYS_MENUSTARTWITHMENU_PID=CONNECTBYPRIORMENU_ID=MENU_PIDorderbyMENUIDMENU白JMENU_DESCRJMENUJJRLMENU_PID101一報(bào)表杳相.021Q2月報(bào)*乂d匕-1013W3季報(bào)xxxdo101色104年報(bào)xxx.do-101510G系統(tǒng)管理206WE用戶管理-1057W7新增用戶ad
7、dJser.do106Bwe刪除用戶delUser.dCi1059角色管理-105ID110新嚕角色,addftole-10911m刪除角色detRole1,r109上述語(yǔ)句,已經(jīng)用數(shù)據(jù)查詢用句就將我們的這個(gè)“樹”的層次關(guān)系理出來(lái)了,如果我們手上有一個(gè)控件叫dtree.js,那么一個(gè)循環(huán)就可以把這個(gè)樹顯示出來(lái)了,不是嗎?/公式:d.add(menu_id,menu_pid,d=newdTree('d');來(lái)看dtree.js的應(yīng)用menudescr','menu_url');d.add(0,-1,'菜單');d.add(1,0,報(bào)表查詢&
8、#39;:exampO01.html');d.add(2,1,'月報(bào)','example01.html');d.add(3,1,'季報(bào)','example01.html');d.add(4,1,'年報(bào)','example01.html');d.add(5,0,'系統(tǒng)管理','example01.html');d.add(6,5,'用戶管理','example01.html');d.add(7,6,'新增用戶',&
9、#39;example01.html');d.add(8,6,'刪除用戶','example01.html');d.add(9,5,'角色管理','example01.html');d.add(10,9,'新增角色','example01.html');d.add(11,9,'刪除角色','example01.html')document.write(d);大家看上面,這個(gè)是dtree.js插件,一個(gè)專門用于生成樹的js插件的使用方法,那么如果我們附以上述的s
10、ql語(yǔ)句在數(shù)據(jù)庫(kù)中把數(shù)據(jù)選出來(lái)后,是不是只要一個(gè)循環(huán)就可以給這個(gè)dtree.js插件顯示了,不是嗎?我們?nèi)绻幌腼@示整顆樹只想顯示如:Oracle中的Sql應(yīng)該怎么寫呢?只顯示系統(tǒng)管理菜單有其下列所有的子菜單,那么我們的經(jīng)查“系統(tǒng)管理”這個(gè)菜單的MENU_ID=105',于是我們的Sql語(yǔ)句如下:SELECT*FROMT_SYS_MENUSTARTWITHMENU_ID=05'CONNECTBYPRIORMENU_ID=MENU_PIDorderbyMENU_IDSELECT*FROTTT_5Y5_HEWSTART¥ITHKEU(J_ID=1IDS'CONNE
11、CTBVCRIMP.TEBLT_工空皿口”工DorderbyMENUMENU口MENU_DESCRJMENU_URL.MENUP1DUKM.T系統(tǒng)管理"M""02106用戶管理1.1ai.1053rW7新增用戶©ddUser.do106J彳W8刪除用戶deiJserdo,1065rlog甬邑管理,ft*1055110新增角色1"addRol已7037_111刪除角色deiRole109對(duì)吧?很簡(jiǎn)單哈!T_Privilege表用于存放系統(tǒng)每個(gè)菜單的詳細(xì)子權(quán)限如“增,刪,改,查”PRIVILEGEJD'PRIVILEGE_TYPETMenu
12、Privilege表這張表就是我們的最終終結(jié)大BOS&I,它里面是一個(gè)完整的系統(tǒng)權(quán)限與角色關(guān)系間的對(duì)應(yīng)。比如說(shuō):我們想要知道“user”這個(gè)角色,可以操作哪些菜單,哪些權(quán)限,那么我們的SQL語(yǔ)句如下:selectdistinctm.menu_id,m.menu_descr,m.menu_url,m.menu_pid,p.privilege_id,p.privilege_typefromt_menu_privilegemp,t_sys_menum,t_privilegep,t_user_rolerwheremp.privilege_id=p.privilege_idandmp.role_
13、id=r.role_idandmp.menu_id=m.menu_idandr.role_id='user'orderbym.menu_id1bkEq-RLMENUJDIMENUDESCRIMENUURLIMENUPID|PRIVILEGE口|PRIVILEGETYPE1105系統(tǒng)管理1I1012105系統(tǒng)管理-01口2310E系統(tǒng)管理-c:103W10G系統(tǒng)管理一Bo1045105系統(tǒng)管理11056105系統(tǒng)管理01067106用戶管理-105101810G用戶管理T口61023106用戶管理-il0510310IDE用戶營(yíng)理-10511106用戶管理-10510512106
14、用戶管理一加510613107資增用戶addUserdo10G10114107新增用戶ddUser.do10610215107新贈(zèng)用戶IMaddUser.do-106103加除改詢印表加除改詢印表加除改增刪修查打報(bào)增刪修查打報(bào)蟠刪修*通過(guò)這個(gè)結(jié)果我們就知道了1.角色"user”能操作哪些菜單2.角色“user”對(duì)某個(gè)菜單具有什么樣的權(quán)限進(jìn)而,我們可以推出:我們想要知道Danzel這個(gè)人,可以操作哪些菜單,以及在哪些菜單上有哪些可供操作的權(quán)限,我們使用如下的SQL語(yǔ)句:selectdistinctm.menu_id,m.menu_descr,m.menu_url,m.menu_pid,
15、p.privilege_id,p.privilege_typefromt_menu_privilegemp,t_sys_menum,t_privilegep,t_user_rolerwheremp.privilege_id=p.privilege_idandmp.role_id=r.role_idandmp.menu_id=m.menu_idandr.user_id='Danzel'orderbym.menuid;MENU。1-G5|MENUDESCRIMENUJJRL,(MENUPIDIPRIVILEGE。IPTMLEGE.TYPE系統(tǒng)管理-0101一增加一B-gio1113
16、i415IB718而202122232H1Q61051051051051Q610E1061D61061061071Q710710710710710B10B1081DG108106109系統(tǒng)管理-系院管理系癰管理-M系院管理一同系統(tǒng)首理用戶管理用戶管理-用戶管理a|用戶管理可用戶管理3用戶管理新增用戶同新增用戶新增用戶新增用戶新增用戶新增用戶國(guó)刪除用戶同刪除用戶w刪除用戶廠W刪除用戶F刪除用戶-刪除用戶addUeerdoaddUser.doaddUserdoaddUserdo-addUser.do-eddUserdodeliUser.clodelUser.dodeIUsendodelUser.c
17、iadelLJser.dadeUser,do帚色管理oD-OE55500-00R,.6666o-oo-O66EG50,0000-2341010101JO31045610-00-0-1J,1156123ooooO111111,1刪修報(bào)增26109龜魚管理WWTO?J02刪除-4cL.7tXI_1.,通過(guò)這個(gè)結(jié)果我們就知道了1. Danzel這個(gè)人能操作哪些菜單2. Danzel對(duì)某個(gè)菜單具有什么樣的權(quán)限3.3界面制作關(guān)于jsp,什么dao層,service層的具體代碼這個(gè)就不講了,這個(gè)沒(méi)有意義的哦,我們來(lái)講設(shè)計(jì)。登錄后如何顯示左邊的樹型菜單:u取得用戶名U將該用戶名作為參數(shù)input進(jìn)如下的SQ
18、四句得到該用戶在登錄后可以看到的系統(tǒng)菜單:selectdistinctm.menu_id,m.menu_descr,m.menu_url,m.menu_pidfromt_menu_privilegemp,t_sys_menum,t_privilegep,t_user_rolerwheremp.privilege_id=p.privilege_idandmp.role_id=r.role_idandmp.menu_id=m.menu_idandr.user_id='Danzel'STARTWITHMENU_PID0'CONNECTBYPRIORM.MENU_ID=M.ME
19、NU_PID田IT易螞軸HsorderbyM.MENU_IDMENU口MENU.OESCBJMENUURL-MENUPIO工候系統(tǒng)管理!-S-021JOE用戶管理1053107新增用戶-acldUser.do106二.4we刪除用戶"-delUserdo-1口G5105角色管理"-1056T1f新增角色acidRole-語(yǔ)1刪除角色'delRole-109I將該結(jié)果直接給于index.jsp頁(yè)面上的dtree.js組件,一個(gè)循環(huán),所有菜單曾樹形顯示。知道用戶登錄后能夠?qū)δ男┎藛?,并且在相關(guān)界面操作時(shí)有哪些子權(quán)限如:增、刪、改、查、打印、報(bào)表的設(shè)計(jì):u在登錄時(shí)得到用戶
20、名等信息,然后將該用戶名作為參數(shù)input進(jìn)入如下的sql語(yǔ)句:selectdistinctm.menuid,m.menudescr,m.menuurl,m.menupid,p.privilegeid,p.privilege_typefromt_menu_privilegemp,t_sys_menum,t_privilegep,userrolerwheremp.privilege_id=p.privilege_idandmp.role_id=r.role_idandmp.menu_id=m.menu_idandr.user_id='Danzelorderbym.menu_id;MENU
21、JDMENU.DESCRMENUURLMENU.PIDPRMLEGE.IDPRfVILEGETYPE1105系統(tǒng)管理i理c1012105系統(tǒng)管理01023105宣統(tǒng)管理"1cW106系統(tǒng)管理一g1。45105系統(tǒng)管理一c11056105系統(tǒng)管理0106?106用戶管理,10515810E用戶官理1051023106用戶管理106110310106用尸官理10510411106用戶管理10510512106用戶管9105|1O613107新增用戶WaddUserdo10G1011410?新熠用戶ddUser.do10610?15107新噌用戶addJserdo“1106103U得到上述
22、結(jié)果后,使用:Haspmap這樣的結(jié)構(gòu)將該用戶所屬的角色分對(duì)每個(gè)菜單有哪些操作(增、刪、改、查、打印、報(bào)表)進(jìn)行存儲(chǔ),放入用戶的session中,在以后用戶在每個(gè)界面進(jìn)行點(diǎn)擊動(dòng)作時(shí)進(jìn)行判斷,或者可以寫個(gè)filter來(lái)進(jìn)行判斷,是不是就可以作到:加除改詢印袤加除改詢印表加除改熠刪修查打報(bào)增刪修直打報(bào)增JH修.知道該登錄用戶在登錄后可以對(duì)哪些菜單進(jìn)行操作,并且擁有什么操作權(quán)限啦?相應(yīng)的我們還需要制作如下的界面:U用戶的管理界面U角色的管理界面U用戶與角色的分配界面U系統(tǒng)菜單的管理界面U具體權(quán)限項(xiàng)的管理界面U系統(tǒng)菜單與角色間具體的權(quán)限分配界面好了,有了這些界面,一個(gè)完整的基于數(shù)據(jù)庫(kù)引擎的權(quán)限系統(tǒng)算是
23、完成了。嚴(yán)重注意:在制作“系統(tǒng)菜單與角色間具體的權(quán)限分配界面”時(shí),如果在界面上把某個(gè)角色對(duì)該條菜單的“查看”這個(gè)選項(xiàng)disable后,那么該角色將不擁有任何該菜單的所有權(quán)限,舉例:某角色對(duì)菜單A擁有如下權(quán)限:增、刪、改、打印但是這個(gè)“查看”權(quán)限沒(méi)有,也有可能是管理員誤操作,但是從真實(shí)情況我們來(lái)說(shuō),這個(gè)角色連“查看”的權(quán)限都沒(méi)有,連菜單都進(jìn)不了,他能做什么“增、刪、改?!钡绕渌牟僮靼。坎僮鱾€(gè)頭?。∈前??所以一旦界面上該角色對(duì)某個(gè)系統(tǒng)菜單沒(méi)有了查看權(quán)限后,它對(duì)這個(gè)菜單的其它權(quán)限也必須從T_MENU_PRIVILEG這個(gè)表中刪除。四、改進(jìn)TSYSTEMMENU勺設(shè)計(jì)前面我們用的是Oracle特有的
24、遞歸SQLa樹形菜單在從數(shù)據(jù)庫(kù)中選取出來(lái)時(shí)就已經(jīng)是一顆樹的結(jié)構(gòu)了,但是像MYSQLSQLSERVERDB2等可能不帶有這樣的特SQL那就需我們自己動(dòng)手去寫遞歸,還有就是很多工程用的是jquery的tree或者是其它相關(guān)的ajaxtree,這些tree都需要用到一個(gè)字段叫l(wèi)evel(此處指深度、層次的意思),如果按照原來(lái)的表結(jié)構(gòu),要取得這個(gè)level,恐怕是要寫遞歸算法了。就算有些數(shù)據(jù)庫(kù)有類似的語(yǔ)句,那也需要你去修改你的SQL語(yǔ)句從未影響了性能與通用性。我們?cè)谶@邊說(shuō),我們無(wú)論什么數(shù)據(jù)庫(kù),如果都用相同的SQLM能把我們需要的東西在數(shù)據(jù)庫(kù)中就排好樹形結(jié)構(gòu)然后一次性選取出來(lái),那應(yīng)該有多好啊。答案是有的
25、,在原來(lái)的T_SYSTEM_MENU中改動(dòng)也不大,只需要增加兩個(gè)字段即可,即:lft與rgt(left,right),這種設(shè)計(jì)其實(shí)已經(jīng)有了,我在此只不過(guò)結(jié)合實(shí)際例子把它應(yīng)用到實(shí)際上,并且進(jìn)一步詳細(xì)描述如果來(lái)實(shí)現(xiàn)它,它就是被稱為:Hierarchical左右值無(wú)限分類實(shí)現(xiàn)算法也稱為預(yù)排序遍歷樹算法,對(duì)于這種層次型數(shù)據(jù)(Data)一般我們有兩種設(shè)計(jì)方法:u毗鄰目錄模式(adjacencylistmodel)u預(yù)排序遍歷樹算法(modifiedpreordertreetraversalalgorithm)4.1 基于lft,rgt的無(wú)限分類算法我們來(lái)看一個(gè)圖,下面我們把我們?cè)械牟藛萎嫵上旅孢@樣的層
26、次關(guān)系:菜單我們把原有的系統(tǒng)菜單畫成了一個(gè)個(gè)的橢圓,最外層的就是我們的菜單,然后在每個(gè)橢園的兩個(gè)端點(diǎn)即left與right,按照從左-右,開始用數(shù)字來(lái)標(biāo)號(hào),上面這個(gè)圖中可以看到最外層這個(gè)大橢園的lft(左)為1,它的rgt(右)為24。那么我們可以用一條標(biāo)準(zhǔn)的SQL而非什么數(shù)據(jù)庫(kù)自帶的特有的、特殊的SQ味顯示出這個(gè)樹形菜單,來(lái)看下面的SQLSELECT來(lái)看顯示的結(jié)果MENUID1MENUDESCftLFTRGTIMENUURLIMENULEVELPIDy101報(bào)表查詢29102102月報(bào)3;彳>xx.doZ1013103季報(bào)"S5Gxxxda2)01AW年報(bào)78wd。21015
27、W5系統(tǒng)管理10閡1-RTo6106用戶管理n16r21057W?新增用戶1213oddU¥er.dO-3叩5e配引除用戶1415delUserdo310691Q9角色管理1?22iZ105w110新墻角色181SaddRole3110gn111劇除角色2021dalRole3iOS看看上面這個(gè)結(jié)果,怎么樣?u樹形結(jié)構(gòu)也有了(可以用于dtree來(lái)顯示);u層次level也有了(可以用于ajax的一些tree);u我們用的SQL又是最標(biāo)準(zhǔn)的所有的數(shù)據(jù)庫(kù)都能用到的SQL嘗到甜頭了是吧?那我們下面來(lái)看如何對(duì)這樣的基于t,rgt的數(shù)據(jù)結(jié)構(gòu)來(lái)作插入操作?4.2 如何在現(xiàn)有節(jié)點(diǎn)中插入新的子節(jié)點(diǎn)如
28、果現(xiàn)在我們要在“報(bào)表查詢”這個(gè)圓里加入一個(gè)菜單,假設(shè)我們就叫“周報(bào)”,那么再來(lái)看這個(gè)原有的圖發(fā)生了什么樣的改變,來(lái)看:看到么,原有的最外層橢園的rgt+2,原有的報(bào)表查詢這個(gè)園的右邊界呢?是不是也加了2啊?而原有的“月報(bào)”這個(gè)圓的lft加了多少?也是+2!那么來(lái)看“周報(bào)”這個(gè)圓的lft與rgt關(guān)系:“周報(bào)”的lft="報(bào)表查詢”這個(gè)圓的lft+1“周報(bào)”的rgt="報(bào)表查詢”這個(gè)圓的lft+2于是我們就可以整理出在原有葉子中插入child的公式:第一步:選取要被插入newchild的外面這個(gè)圓的lft的值第二步:原有的數(shù)據(jù)中所有的rgt如果第一步中彳#到的lft的值,那么全
29、部+2第三步:原有的數(shù)據(jù)中所有的lft如果第一步中彳#到的lft的值,那么全部+2第四步:將插入的節(jié)點(diǎn)的lft與rgt的設(shè)計(jì),新節(jié)點(diǎn)的lft=第一步中的lft+1,新節(jié)點(diǎn)的rgt=第一步中的lft+2來(lái)看一個(gè)具體的例子:我們要在“報(bào)表查詢”即menu_id='101'中插入一個(gè)新的菜單,叫“周報(bào)”,下面是按照上面四步算法的相關(guān)SQL語(yǔ)句:第一步SELECTlftFROMt_sys_menuwheremenu_id='101'這一步我們得到的值為:2第二步:UPDATEt_sys_menuSETrgt=rgt+2WHERErgt>2;第三步:UPDATEt_
30、sys_menuSETlft=lft+2WHERElft>2;第四步:NSERTINTOt_sys_menu(menu_id,menu_descr,menu_url,lft,rgt)VALUES'113','周報(bào),周報(bào)的url',(2+1),(2+2);插完后我們運(yùn)行查詢SQLSELECTnode.menu_idmenuId,node.menu_descrmenuDescr,node.lft,node.rgt,node.menu_urlmenuUrl,(COUN(parent.menu_id)-1)menuLevel,node.menu_pidpidFRO
31、Mt_sys_menunode,t_sys_menuparentWHEREnode.lftBETWEENparent.lftANDparent.rgtANDnode.menu_descr!='菜單'GROUPBYnode.menu_id,node.menu_descr,node.lft,node.rgt,node.menu_url,node.menu_pidORDERBYnode.lftAiQHV穹ySB*MENUID(MENUDESCRJLFTRGTMENUURLMENULEVELP1101報(bào)表查詢211102-3r4峋報(bào)的HL一102月報(bào)一56xxx.do21(他1鎖R市8
32、jwc.do-2T(5年報(bào)WS10)ooc.do21(105家統(tǒng)管理81121s10不106角戶管理1318-2T(8107新增用戶1415eddUserdo31(79108醐除用戶"Wf-1617delUserdo31(10109角色管理ST-192421(11110期增角色201TaddRole31(12-111刪除角色»|22R23delRale31(Look,數(shù)據(jù)正確無(wú)誤,我們來(lái)看整個(gè)t_sys_menu表里的數(shù)據(jù):VMENUJD|MENUDESORJMFNUJJRIMFNILP1D_ILFT;M*=1J2菜單-1126101報(bào)表查詢02H3102月報(bào)xocdo-1
33、01564i-103季報(bào)_wocdo10178rfs1Q4卑報(bào)wtdo"*1Q1|910rrS|105系統(tǒng)管理事012257106席戶管理10513188二107新招用戶eddUser.do10614159108刪除用戶delUserdo106T11517Mio109角色管理1051924rv110新增角色-addRoleT092021nil111刪除角色delRole1092223|13-113周報(bào)一.周報(bào)的url3ALook,整個(gè)最外層的“圓”,右邊界增加了2,從原有的24變成了26。1.3如何插入一個(gè)新的節(jié)點(diǎn)上面講的是在原有的節(jié)點(diǎn)中插入一個(gè)子節(jié)點(diǎn),現(xiàn)在來(lái)講,如何插入一個(gè)新的節(jié)點(diǎn)
34、,比如說(shuō):我們現(xiàn)在有:報(bào)表查詢,系統(tǒng)管理兩大菜單,我們還想加一個(gè)菜單:保單審核,怎么來(lái)做?我們把4.2節(jié)中“如何在現(xiàn)有節(jié)點(diǎn)中插入新的子節(jié)點(diǎn)”里四步公式,稍稍改動(dòng)一下第一步:選取要被插入新的節(jié)點(diǎn)左邊節(jié)點(diǎn)的rgt的值第二步:原有的數(shù)據(jù)中所有的rgt如果第一步中得到的rgt的值,那么全部+2第三步:原有的數(shù)據(jù)中所有的lft如果第一步中得到的rgt的值,那么全部+2第四步:將插入的節(jié)點(diǎn)的lft與rgt的設(shè)計(jì),新節(jié)點(diǎn)的lft=第一步中的rgt+1,新節(jié)點(diǎn)的rgt=第一步中的rgt+2下面來(lái)看我們?cè)凇皥?bào)表查詢”與“系統(tǒng)管理”中間,插入一個(gè)菜單叫“保單審核”。第一步SELECTrgtFROMt_sys_me
35、nuwheremenu_id='101'這一步我們得到的值為:11第二步:UPDATEtsysmenuSETrgt=rgt+2WHERErgt>11;第三步:UPDATEtsysmenuSETlft=lft+2WHERElft>11;第四步:NSERTINTOt_sys_menu(menu_id,menu_descr,menu_url,lft,rgt)VALUES'114','保單審核','',(11+1),(11+2);運(yùn)行下面的SQL語(yǔ)句我們來(lái)檢查一下插入的效果:SELECTnode.menu_idmenuId,n
36、ode.menu_descrmenuDescr,node.lft,node.rgt,node.menu_urlmenuUrl,(COUN(parent.menu_id)-1)menuLevel,node.menu_pidpidFROMt_sys_menunode,t_sys_menuparentWHEREnode.lftBETWEENparent.lftANDparent.rgtANDnode.menu_descr!='菜單'GROUPBYnode.menu_id,node.menu_descr,node.lft,node.rgt,node.menu_url,node.menu
37、_pidORDERBYnode.lftmt|®*-一-n-«口:Q她*MENUIDhMENUDESCRZLFTJRGTJMENUURLIMENULEVELPI1101報(bào)表杳詢211102ii3周報(bào)一34周報(bào)的url-23102月報(bào)56小一此2It4103季報(bào)78xxM.doI21(59-rxjotdo21£6里畝核12一15711S手工畝移1314手,由核的url28105系統(tǒng)管理ji1629B109106用戶管理SiH*a17222It10107新增用戶L*1819AddUser.do31£11103刪除用戶2021delUserdo31£12109愈邑管理23p-28E!21(13no新增角色一2425ddRole,31(14_111®除角色_L2627delRole-31£怎么樣,結(jié)果對(duì)了吧,呵呵!看看整個(gè)菜單的右邊界吧,從原來(lái)的26變成了28了,是不是哦?1.3如何刪除一個(gè)節(jié)點(diǎn)來(lái)看公式第一步:選取要被刪除的菜單的lft的值,rgt的值,以及寬度(width=rgt-lft+1);第二步:刪除所有的位于第一步中得到的lf
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年錘紋助劑合作協(xié)議書
- 基于大數(shù)據(jù)技術(shù)的頁(yè)巖油甜點(diǎn)預(yù)測(cè)方法研究與應(yīng)用
- 輕資產(chǎn)商業(yè)模式下森馬服飾價(jià)值創(chuàng)造路徑及效果研究
- VoLTE無(wú)線側(cè)語(yǔ)音質(zhì)量?jī)?yōu)化方法研究
- 2024年黃山市徽州區(qū)事業(yè)單位統(tǒng)一招聘筆試真題
- 2025年度時(shí)尚服飾品牌代理分銷授權(quán)書
- 2025年度股東退出與公司知識(shí)產(chǎn)權(quán)保護(hù)合同
- 二零二五年度餐飲檔口食品安全風(fēng)險(xiǎn)評(píng)估與管理合同
- 黃金投資信托產(chǎn)品銷售代理與服務(wù)合同(2025年度)
- 2025年度車輛事故責(zé)任免除與處理流程協(xié)議樣本
- 好的心理治愈只需一次:《了凡四訓(xùn)》的心理學(xué)解讀
- 三年級(jí)aredcoat公開課一等獎(jiǎng)?wù)n件省賽課獲獎(jiǎng)?wù)n件
- 污水處理廠項(xiàng)目委托運(yùn)營(yíng)協(xié)議
- 小螞蟻搬家繪本故事
- 開展因私出國(guó)境管理工作的自查報(bào)告10篇
- 分子克隆及蛋白表達(dá)常見(jiàn)問(wèn)題和對(duì)策
- 全美國(guó)聯(lián)邦刑事訴訟規(guī)則(中英文對(duì)照)
- 哈爾濱LED廣告市場(chǎng) 媒體數(shù)據(jù)分析
- 載波與測(cè)距碼
- 鋼結(jié)構(gòu)設(shè)計(jì)手冊(cè)
- (新版)特種設(shè)備安全管理高分通關(guān)題庫(kù)600題(附答案)
評(píng)論
0/150
提交評(píng)論