此CRM包括三個方面
客戶管理系統:客戶的資訊 預約 生日提醒
進銷存系統:進貨 入庫 銷售
OA管理系統:比如日程安排
****************************************************************************************************************************************
約定大約配置!!!!!!!!!!!!!!!!!!!!!!得好好看看
ruby的純面向對象 比如 取絕對值 負數也是一個對象
////////權限控制分為兩部分:粗粒度的權限控制和細粒度的權限控制
粗粒度的權限控制(過濾器實作):
注意點一:
要注意哪些頁面不可以被攔截,比如index.jsp不能被攔截 login.jsp不能被攔截,image.jsp(用于顯示驗證碼)不能被攔截
将不攔截的這些頁面寫到一個配置檔案裡面 side.properties;然後在攔截器裡面将此屬性檔案讀入即可。
注意點二:
使用者正确登入後儲存使用者的資訊到session中,然後轉發到main.jsp。中間需要一個過濾器來控制!!!!當登入的時候要經過過濾器——判斷使用者資訊
是否存放在session中,是的話放行,不是的話重定向到登入頁面
注意要在web.xml裡面配置過濾器
////////細粒度的權限控制(重點是寫了一個BaseAction,其餘的Action都是繼承自BaseAction)
第一張重要的表:操作表。
這張表列出了所有子產品的所有操作。
主要字段:子產品名稱 操作名稱(比如增加,删除,修改) 排序 标題 提示 備注
第二張重要的表:User表
這張表主要用于描述了使用者資訊
主要字段:ID 使用者名 private SysRole sysRole(權限組) private SysUserGroup sysUserGroup(所屬部門)
第三種重要的表:操作權限表
這張表主要用來描述每個權限組對子產品的方法的操作。即說明了每個權限組對哪些子產品裡的方法具有哪些操作
主要字段:權限組編号 功能子產品名稱 功能子產品的操作(比如增加,删除)。用這三個字段作為聯合字段,確定了唯一性。
即看到這張表就知道了此權限組對哪些子產品的哪些方法具有哪些操作。
注意:由系統管理者給每個權限組設定權限
代碼實作:
自定義一個BaseAction extends DispatchAction,讓其餘的Action類繼承自此BaseAction再結合注解來解決問題。
核心重點一:
自定義注解其生命周期為@Retention(RetentionPolicy.RUNTIME),該注解有兩個屬性——子產品名稱和權限(比如,增加,删除,修改)
然後給Action裡的方法加上次自定義注解,表示此方法屬于哪個子產品和此方法是幹什麼用的
核心重點二:
就是重寫了DispatchAction裡面的execute()方法。
第一步:從Session裡面取出User,重點是得到其權限組編号。
第二步:然後經過反射得到想要執行的方法。
第三步:得到此方法後,利用method.getAnnotation(MyAnnotation.class)得到此方法上的注解。
得到了注解當然也就得到了其屬性——子產品名稱和權限(比如,增加,删除,修改)
第四步:利用此權限組号從操作權限表查出其所具有的所有權限,傳回值為一個list
周遊此list(裡面的每一個對象都有權限組編号,子產品名稱,權限)的每一個成員,将此成員與我們得到的權限組編号,子產品名稱,權限 (比如,增加,删除,修改)比對。
成功的話表示有此權限,否則失敗