此方法不依靠容器 框架,適用于小系統(主要jsp頁面要少于100,因為是硬編碼到JSP),適用于要精確控制頁面field的情況較多的系統。
(插句話:要分清權限控制與業務邏輯,業務邏輯就是情況由系統運行時的某些條件決定,如學生治理系統中,某一學生進入系統,只能看自己的記錄,因為可看的記錄是由學號來決定的,所以這是業務邏輯,而又如學生不能看老師的記錄,這是有學生的身份來決定的,所以這是權限控制。)
好了,進入正題!
建表:
user(user信息: userID userPassWord 等)
role(role描述:roleID roleDesc)
permission(permission描述:permissionID permissionDesc)
user-role(user role對應關系表:userID roleID)
role-permission(role permission對應關系表:roleID permissionID)
user-permission(user permission對應關系表:userID permissionID)
1 此處role沒有繼續關系,只是permission的集合
2 user-permission表只是為了方便,其數據是根據user-role role-permission兩表得來,只有在user-role role-permission兩表有更新的時候更新此表,并不能單獨賦予user某個permission,只能賦予user一個或多個role。
3 permission的分配,這是一個難點,很多比較復雜的權限控制系統也是因為這個才發展出來,此處把它盡量想簡單,不考慮業務邏輯,以頁面為視角,分兩層,首先是需要控制的jsp頁面,然后是需要控制的頁面field(包括link,text,textbox,button等等),field這一層還有privilege之分(R和W,即可讀和可寫)
基本思路:進入JSP頁面時,檢查用戶信息,查到用戶有此permission就包含此代碼,假如沒有此permission就不包含此代碼,此功能由Tag來完成(不會寫Tag?不要緊,抄!)。看代碼吧!
1 建表(如上)
2 建兩個class(bean) (UserProfile是用戶基本信息 UserPermission是permission )
UserProfile.java:
package com.××.××.××;
import java.util.Collection;
public class UserProfile {
private String userId;
private String userType;
private String companyNo;
private String companyName;
private String companyType;
private Collection userPermissions;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserType() {
return userType;
}
public void setUserType(String userType) {
this.userType = userType;
}
public String getCompanyNo() {
return companyNo;
}
public void setCompanyNo(String companyNo) {
this.companyNo = companyNo;
新聞熱點
疑難解答