免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
基于角色和資源的用戶權(quán)限控制(用SpringMVC實現(xiàn))

介紹

用戶權(quán)限控制幾乎是每個網(wǎng)站都會涉及到的問題,這不僅是涉及到安全,而且還涉及到用戶的體驗,例如,某個用戶可能只需要用到少數(shù)幾個模塊,那么,我們就不應(yīng)該將無關(guān)的模塊顯示給他。對于很多的小型網(wǎng)站,可能只需要一個管理員賬號和密碼就可以了,但對于稍微大一點的網(wǎng)站,都會有一套比較嚴格的用戶權(quán)限管理機制。在實現(xiàn)方式方面,常見的有以下幾種(只是按經(jīng)驗劃分,不一定準確):

1、基于層級:將使用者分成多個層級,層級越高擁有的權(quán)限越大。例如在一個論壇系統(tǒng),可以分為超級管理員、普通管理員、版主等,上級會擁有下級的所有權(quán)限。

2、基于角色:如果系統(tǒng)的各個模塊所使用的用戶是相對固定的,那么使用這種方式是不錯的選擇。例如,一個超市管理軟件可以分為收銀員、開票員、倉管員等,然后分別有不同的應(yīng)用模塊,用戶之間的地位是平等的。

3、基于資源:按一定的粒度將各個模塊或操作定義為相應(yīng)的資源,然后再將資源授權(quán)給用戶使用。例如,可以將文章 的添加、刪除、修改、查看定義為資源,不同的人可以進行不同的操作。

4、基于流程:資源的使用環(huán)環(huán)相扣,通過前后環(huán)節(jié)的消息推送來實現(xiàn)控制。例如,在一個公文系統(tǒng),要發(fā)布一份公文,首先要有基層科員起草,然后推送給科長審批,再推送給辦公室校對,最后推送給局長簽發(fā),如果公文不在當(dāng)前用戶的環(huán)節(jié),即使是局長也無權(quán)修改。

基于角色和資源的用戶權(quán)限控制(用SpringMVC實現(xiàn))

建立數(shù)據(jù)表

通常,我們會混合使用上述的幾種方式。其中,基于角色和資源是目前較為常見的一種實現(xiàn),一般會有以下幾張表:

用戶表(users):id、用戶名、密碼、狀態(tài)(是否可用,下同)

角色表(roles):id、角色名、角色狀態(tài)

權(quán)限表(permissions):id、權(quán)限名、權(quán)限狀態(tài)

除了這三張表外,還要兩張表來將三者關(guān)聯(lián)起來:

用戶角色關(guān)聯(lián)表(users_roles):用戶id、角色id(復(fù)合主鍵)

角色權(quán)限關(guān)聯(lián)表(roles_permissions):角色id、權(quán)限id(復(fù)合主鍵)

然后,我們在相應(yīng)的action中通過annotation,或者在XML中定義相應(yīng)的permission即可。

如果你不想自己實現(xiàn),可以直接用Spring Security、Shiro等第三方安全框架,只要參照其規(guī)范建立幾張表,進行一下配置即可。如果要自己實現(xiàn)也不難,下面我們就通過過濾器來實現(xiàn)。

在Web環(huán)境中,“資源”大部分情況就是指用戶是否有權(quán)限訪問某個URL。為了實現(xiàn)更加靈活的配置,我們在上述提到的幾張表基礎(chǔ)上,再增加兩張表:

資源表(resources):id、URL、描述

權(quán)限資源關(guān)聯(lián)表(permissions_resources):權(quán)限id、資源id(復(fù)合主鍵)

相關(guān)數(shù)據(jù)表

大體思路

(1)系統(tǒng)啟動的時候,建立一個Map resourceMap,鍵名為resource(即URL),鍵值為跟該resource關(guān)聯(lián)的所有permission。由于一個資源可能對應(yīng)多個permission(如文章查看權(quán)限可以授予一般用戶,同時也授予文章管理員),因此這里需要用到一個集合。

(2)當(dāng)用戶登錄的時候,獲取該用戶所對應(yīng)的角色,再根據(jù)角色獲取其擁有的permission集合

(3)當(dāng)用戶訪問受限資源的時候,通過URL從resourceMap中獲取所需的permission集合,再跟該用戶擁有的permission集合比對,用戶有相應(yīng)的permission則通過,否則不通過。

實現(xiàn)代碼

(僅供參考,不一定完善)

1、啟動的時候建立resourceMap

2、用戶登錄的時候加載用戶的權(quán)限并放到Session

3、創(chuàng)建攔截器,對相關(guān)資源進行控制

4、Spring配置文件很簡單

如果你系統(tǒng)本身不復(fù)雜的話,其實也可以省掉resource表,直接使用URL作為permission,然后role跟permission對應(yīng)就可以了。這種實現(xiàn)方式的好處是可以對資源進行很精確的配置,除了上述方式,還可以采用粗粒度的配置(如將文章管理作為一項資源uc/articles,包括增刪改查),或者更加細粒度的配置(如針對URL的請求方法POST、GET、PUT、DELETE),不過也有一個問題,就是當(dāng)系統(tǒng)的資源很多的時候,在進行用戶權(quán)限比對的時候會有較大的消耗。這時候,可以考慮對資源和用戶進行分組,先進行分組匹配,再查找相關(guān)資源。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
簡單的RBAC用戶角色權(quán)限控制
[七年技術(shù)總結(jié)系列][理論篇]-RBAC權(quán)限模型由淺入深
如何設(shè)計網(wǎng)站權(quán)限系統(tǒng)?
[原創(chuàng)] 基于RBAC的權(quán)限設(shè)計 - 歡迎大家討論 - 我的IT生活 - BlogJava
通過SpringMVC+Annotation實現(xiàn)方法、按鈕級別的細粒度權(quán)限控制
Spring Security3初步學(xué)習(xí)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服