關(guān)于web系統(tǒng)的權(quán)限限定問題,可能有很多的辦法,我在這里說一下自己的一些小技巧,起到拋磚引玉的作用,忘各位指正:
系統(tǒng)中一個(gè)角色包含多個(gè)用戶,角色和用戶之間最好采用一對多,以免發(fā)生混亂;
自系統(tǒng)初起的時(shí)候,系統(tǒng)只有一個(gè)超級(jí)用戶(例如root),有兩個(gè)默認(rèn)角色,即游客角色和注冊用戶角色;
超級(jí)用戶可以在后續(xù)管理中添加角色,默認(rèn)角色不能刪除,其他角色的刪除中如果這個(gè)角色下有用戶,可以采取不允許刪除或刪除后這些用戶的角色自動(dòng)轉(zhuǎn)為注冊用戶角色;
每個(gè)角色用戶訪問系統(tǒng)某些功能模塊的權(quán)利,某個(gè)角色是否可以訪問某個(gè)功能模塊可以由超級(jí)用戶修改,這里也包括默認(rèn)角色所對應(yīng)的權(quán)限模塊;
角色與系統(tǒng)模塊之間是多對多的關(guān)系,即一個(gè)角色可以訪問多個(gè)模塊,一個(gè)模塊可能有多個(gè)角色訪問;
我們這里主要談struts,一個(gè)模塊包含多個(gè)action,action和模塊是多對一的關(guān)系;
這樣用戶訪問某個(gè)action時(shí)會(huì)映射到系統(tǒng)的某個(gè)模塊,這是系統(tǒng)取出當(dāng)前用戶所在的角色,看看這個(gè)角色是否有訪問此模塊的權(quán)限,即可以實(shí)現(xiàn)struts中的權(quán)限設(shè)定;
這一過程主要包含以下幾塊:
1.系統(tǒng)的各個(gè)模塊在系統(tǒng)開發(fā)完畢后就會(huì)形成,這些模塊信息保存在持久媒體中;
2.struts-config.xml中,每個(gè)action的配置中都有一個(gè)role屬性,這個(gè)屬性中填寫一個(gè)模塊的名稱,這樣就建立起了action與模塊的多對一關(guān)系;
3.用戶、角色、模塊之間的映射關(guān)系通過數(shù)據(jù)庫表間的映射,這里就不再多說;
4.?dāng)U展struts中的requestProcessor類(注意如果使用tiles框架,需要繼承另外一個(gè)tiles專用的類),復(fù)寫其中的processorRole方法(其他方法也很有用,例如preprocess方法,可以設(shè)置提交的字符串都為UTF-8,也可以用戶寫一些系統(tǒng)的訪問日志等等),在這個(gè)方法中可以取出當(dāng)前action的模塊名稱和當(dāng)前用戶的角色,這樣就可以實(shí)現(xiàn)對于用戶的權(quán)限限定了。
這樣就可以實(shí)現(xiàn)權(quán)限限定了,這個(gè)方法的優(yōu)點(diǎn)是即便是從某些地方找到下載或者訪問某些重要功能的鏈接仍然可以攔截,缺點(diǎn)是每次訪問都需要判定,但做好適當(dāng)?shù)木彺婕纯桑绾巫鼍彺嬉蚋飨到y(tǒng)而異;如果有特殊需要還可以限定ip,甚至一個(gè)session對應(yīng)一個(gè)id,如果換了ip則session立即銷毀,防止用戶轉(zhuǎn)貼了sessionid所假冒的用戶。
今天比較暈,很少寫這么長的文章,大家先湊合看,有什么問題歡迎指出,我會(huì)盡快修正。
系統(tǒng)中一個(gè)角色包含多個(gè)用戶,角色和用戶之間最好采用一對多,以免發(fā)生混亂;
自系統(tǒng)初起的時(shí)候,系統(tǒng)只有一個(gè)超級(jí)用戶(例如root),有兩個(gè)默認(rèn)角色,即游客角色和注冊用戶角色;
超級(jí)用戶可以在后續(xù)管理中添加角色,默認(rèn)角色不能刪除,其他角色的刪除中如果這個(gè)角色下有用戶,可以采取不允許刪除或刪除后這些用戶的角色自動(dòng)轉(zhuǎn)為注冊用戶角色;
每個(gè)角色用戶訪問系統(tǒng)某些功能模塊的權(quán)利,某個(gè)角色是否可以訪問某個(gè)功能模塊可以由超級(jí)用戶修改,這里也包括默認(rèn)角色所對應(yīng)的權(quán)限模塊;
角色與系統(tǒng)模塊之間是多對多的關(guān)系,即一個(gè)角色可以訪問多個(gè)模塊,一個(gè)模塊可能有多個(gè)角色訪問;
我們這里主要談struts,一個(gè)模塊包含多個(gè)action,action和模塊是多對一的關(guān)系;
這樣用戶訪問某個(gè)action時(shí)會(huì)映射到系統(tǒng)的某個(gè)模塊,這是系統(tǒng)取出當(dāng)前用戶所在的角色,看看這個(gè)角色是否有訪問此模塊的權(quán)限,即可以實(shí)現(xiàn)struts中的權(quán)限設(shè)定;
這一過程主要包含以下幾塊:
1.系統(tǒng)的各個(gè)模塊在系統(tǒng)開發(fā)完畢后就會(huì)形成,這些模塊信息保存在持久媒體中;
2.struts-config.xml中,每個(gè)action的配置中都有一個(gè)role屬性,這個(gè)屬性中填寫一個(gè)模塊的名稱,這樣就建立起了action與模塊的多對一關(guān)系;
3.用戶、角色、模塊之間的映射關(guān)系通過數(shù)據(jù)庫表間的映射,這里就不再多說;
4.?dāng)U展struts中的requestProcessor類(注意如果使用tiles框架,需要繼承另外一個(gè)tiles專用的類),復(fù)寫其中的processorRole方法(其他方法也很有用,例如preprocess方法,可以設(shè)置提交的字符串都為UTF-8,也可以用戶寫一些系統(tǒng)的訪問日志等等),在這個(gè)方法中可以取出當(dāng)前action的模塊名稱和當(dāng)前用戶的角色,這樣就可以實(shí)現(xiàn)對于用戶的權(quán)限限定了。
這樣就可以實(shí)現(xiàn)權(quán)限限定了,這個(gè)方法的優(yōu)點(diǎn)是即便是從某些地方找到下載或者訪問某些重要功能的鏈接仍然可以攔截,缺點(diǎn)是每次訪問都需要判定,但做好適當(dāng)?shù)木彺婕纯桑绾巫鼍彺嬉蚋飨到y(tǒng)而異;如果有特殊需要還可以限定ip,甚至一個(gè)session對應(yīng)一個(gè)id,如果換了ip則session立即銷毀,防止用戶轉(zhuǎn)貼了sessionid所假冒的用戶。
今天比較暈,很少寫這么長的文章,大家先湊合看,有什么問題歡迎指出,我會(huì)盡快修正。