近幾天不是很忙,就想看看關(guān)于
WEB
方式
(Jsp)
后臺(tái)權(quán)限控制的設(shè)計(jì)實(shí)現(xiàn)問(wèn)題
,
在
Google
搜了一下,一大堆的東西,當(dāng)看到頭大的時(shí)候決定自己先試著做一個(gè)簡(jiǎn)單例子。
?
先推薦大家有時(shí)間看一下關(guān)于
RBAC
即角色訪問(wèn)控制
(Role Based? Access Control)
的相關(guān)文章,雖然已經(jīng)是個(gè)老話題了
,
但如果要在一個(gè)大的項(xiàng)目中實(shí)現(xiàn)權(quán)限控制的話,最好還是按照這些文章中的設(shè)計(jì)去逐步實(shí)現(xiàn)。
?
以下的設(shè)計(jì)只是一個(gè)簡(jiǎn)單的控制,可以應(yīng)用在一些小成本的項(xiàng)目中。也可能不是最好的解決方法,但旨在與大家交流及共享。各位見(jiàn)笑,閑話少續(xù),言歸正傳。
?
我的設(shè)計(jì)思路是這樣的:
?
1,
管理員用戶表中有個(gè)字段專(zhuān)門(mén)記錄每個(gè)用戶所擁有的權(quán)限。
2,
權(quán)限和文件名對(duì)應(yīng),比如有個(gè)權(quán)限的名稱(chēng)叫新聞編輯,而與此編輯權(quán)限對(duì)應(yīng)的文件有:
News_add.jsp,News_del.jsp,News.action
等,他們之間是一對(duì)多的關(guān)系。如下圖:
?
如果還不明白,請(qǐng)繼續(xù)往下看:我的想法是這樣的
…
比如
a
用戶如果有新聞編輯的權(quán)限,那么在
a
用戶記錄權(quán)限的字段里就應(yīng)該記錄
New_add.jsp,News_del.jsp,News.acion
這些值。
?
3
,那么具體怎么對(duì)資源進(jìn)行控制呢?首先在用戶登陸后,將用戶的所以信息以對(duì)象的形式放入
Session
中。如將用戶對(duì)象
auser
放入到
session
中,則可用類(lèi)似
AdminUser adminuser = (AdminUser) session.getAttribute("auser")
adminuser.getUserPopedom()
的方法將該用戶所擁有的權(quán)限字符取出來(lái),我們這里取出來(lái)的字符會(huì)是
New_add.jsp,News_del.jsp,News.acion
。那么在需要做控制的頁(yè)面首先利用
String url = servletRequest.getRequestURI();
url = url.substring(url.lastIndexOf("/") + 1, url.length());
取出當(dāng)前頁(yè)的文件名,再將此文件名與該用戶的權(quán)限字符做比較,如果該文件名在權(quán)限字符中可以找到,則表明該用戶擁有此頁(yè)面操作的權(quán)限。
今天先寫(xiě)到這里,明天把相關(guān)代碼給貼出來(lái)...