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

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

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