權(quán)限是框架的核心,BDF2中的權(quán)限是以SpringSecurity3.1為基礎(chǔ)實(shí)現(xiàn),使用時(shí)以角色為中心,將資源(URL或組件)與角色綁定,再將各種類(lèi)型的成員(用戶(hù)、部門(mén)、崗位、群組)放置到角色當(dāng)中,在放置成員到角色的過(guò)程當(dāng)中還可以設(shè)置是否授權(quán),從而實(shí)現(xiàn)權(quán)限加減功能。如下圖所示:

從上圖當(dāng)中,可以看到URL權(quán)限在操作過(guò)程當(dāng)中以角色為中心,首先創(chuàng)建角色,然后將角色與需要進(jìn)行權(quán)限管控的URL關(guān)聯(lián)(如上圖中的URL1,URL2),接下來(lái)將角色成員放到角色當(dāng)中,BDF2中允許的角色成員有三類(lèi),分別是:用戶(hù)、崗位、部門(mén)和群組,且成員在放置到角色中時(shí)還可以設(shè)置該成員在這個(gè)角色中的權(quán)限(能不能訪問(wèn)這個(gè)角色所擁有的資源)。
以上圖為例,用戶(hù)A在角色A中的權(quán)限為允許訪問(wèn),那么用戶(hù)A就可以訪問(wèn)角色A中的URL1和URL2兩個(gè)資源,同樣崗位A在角色A中的權(quán)限也是允許訪問(wèn),那么所有崗位是崗位A的用戶(hù)都可以訪問(wèn)角色A中的資源,也就是URL1和URL2;而部門(mén)A和群組A在角色A中的權(quán)限為禁止訪問(wèn),也就是說(shuō)隸屬于部門(mén)A和群組A的用戶(hù)都不能訪問(wèn)角色A中的資源(URL1和URL2)。
BDF2當(dāng)中,角色的四種類(lèi)型的成員在進(jìn)行權(quán)限計(jì)算的時(shí)候是有優(yōu)先級(jí)的,如上圖所示,權(quán)限最先計(jì)算的是用戶(hù),然后是崗位,接下來(lái)是部門(mén),最后是群組,如果在用戶(hù)層面已經(jīng)明確取得當(dāng)前用戶(hù)對(duì)某資源的訪問(wèn)權(quán)限(允許或拒絕),那么就不再計(jì)算后面的崗位、部門(mén)和群組,同樣如果在用戶(hù)這個(gè)層面沒(méi)有得到某資源的訪問(wèn)權(quán)限,就會(huì)用這個(gè)用戶(hù)所在的崗位進(jìn)行計(jì)算...,依次類(lèi)推。還以上圖為例,假如用戶(hù)A隸屬于部門(mén)A,但不在崗位A與群組A當(dāng)中,那么用戶(hù)A在角色A中的權(quán)限又是什么呢?通過(guò)上面描述的規(guī)則,那么用戶(hù)A對(duì)角色A中的兩個(gè)URL資源是允許訪問(wèn),因?yàn)橛脩?hù)A直接與角色A綁定,且訪問(wèn)權(quán)限是允許,所以權(quán)限在計(jì)算時(shí)在用戶(hù)層面就可以得到答案,而不再向下進(jìn)行計(jì)算,所以用戶(hù)A可以訪問(wèn)角色A中兩個(gè)URL資源。
上述角色成員計(jì)算的規(guī)則其實(shí)就是SpringSecurity中投票器的計(jì)算規(guī)則,利用這個(gè)規(guī)則我們就可以實(shí)現(xiàn)權(quán)限的加減。舉個(gè)例子,假如有一個(gè)部門(mén)X,其中有1000個(gè)人,這1000人都可以對(duì)資源X進(jìn)行訪問(wèn),現(xiàn)在這個(gè)部門(mén)來(lái)了個(gè)新同事X,因?yàn)槠溥€處于試用期,所以還不能訪問(wèn)資源X,這時(shí)在進(jìn)行權(quán)限設(shè)置時(shí)就可以利用權(quán)限的加減法實(shí)現(xiàn),具體做法是:創(chuàng)建一個(gè)角色,比如角色X,在這個(gè)角色當(dāng)中放置資源X,然后將部門(mén)X與這個(gè)角色X關(guān)聯(lián)且訪問(wèn)權(quán)限為允許,同時(shí)再把這個(gè)新同事X與這個(gè)角色X關(guān)聯(lián),訪問(wèn)權(quán)限為拒絕,這樣就可以實(shí)現(xiàn)我們需要的權(quán)限功能,這也是權(quán)限加減功能最好的應(yīng)用示例,如下圖所示:

在權(quán)限管理菜單組當(dāng)中,我們可以找到針對(duì)角色、角色資源、角色成員及群組維護(hù)的菜單項(xiàng),在進(jìn)行URL權(quán)限管理時(shí),首先我們需要添加相關(guān)角色(角色維護(hù)中添加),然后通過(guò)URL權(quán)限維護(hù)將需要權(quán)限管理的URL與角色關(guān)聯(lián)起來(lái),最后利用角色成員維護(hù)把成員(用戶(hù)、崗位、部門(mén)及群組)放到這個(gè)角色當(dāng)中,角色維護(hù)效果頁(yè)面如下:
可以看到,這里在建立角色與URL關(guān)聯(lián)的操作過(guò)程當(dāng)中,可以看到URL我們只需要勾選就行,如果其中不存在你需要管控的URL,那么,可以在菜單維護(hù)頁(yè)中把需要的URL添加進(jìn)去即可,如果添加的URL不想成為導(dǎo)航菜單,只需要將是否用于導(dǎo)航設(shè)置為否即可。最后,就是將成員放置到角色當(dāng)中,如下圖所示:
在上圖所示,無(wú)論是添加用戶(hù)還是崗位還是部門(mén)還是群組成員,都可以設(shè)置這個(gè)成員在當(dāng)前角色中的權(quán)限(是否授權(quán))。
在維護(hù)完成角色資源或角色成員后,要使權(quán)限生效,我們必須要點(diǎn)擊工具欄上的”刷新緩存“按鈕,否則權(quán)限將不生效。同時(shí)如果您是在集群環(huán)境下,那么可以采用BDF2-WEBSERVICE模塊提供的權(quán)限緩存同步刷新或Terracotta Server來(lái)實(shí)現(xiàn)權(quán)限信息的同步刷新(我們這里推薦使用BDF2-WEBSERVICE模塊提供的權(quán)限緩存同步刷新)。
更多建議: