昨天對現有系統已實現的功能大概的描述了一下,其實里面我覺得最重要的是對客戶可能存在的權限需求的分類。這兩天也在寫關于權限的文檔,這里想到了對權限的第六種分類,其實之所以這樣分類也是由于具體實現的差異所造成的。
六是數據范圍操作權限,其實這個是可以和數據范圍權限合為一個的。具體的區別在與對已經劃分范圍的數據再增加操作的權限控制。還是以財務管理為例,部門經理只能查看金額小于1W的數據;而總經理則沒有限制,可以查看所有數據。但是請注意:他們只能對這些數據擁有查看的權限,不能修改或是刪除,而財務則擁有修改的權限。在一些情況下可以用模塊操作權限和數據范圍權限的疊加來滿足對該權限的需求,但是在權限復雜的情況下,這個權限獨立出來是必須的。
事實上現有系統就是
用模塊操作權限和數據范圍權限的疊加來滿足這部分需求的。
posted @
2007-03-20 11:04 ronghao 閱讀(2240) |
評論 (3) |
編輯 收藏
很早就完成了權限系統的編碼,這里把一些功能說明貼出來,也希望提提意見。
權限系統基于acegi框架實現了從前端頁面到后臺數據全面的控制。在權限控制中,它將權限分成五類:??
? 一是系統權限,主要是對模塊為單位的權限劃分,具體就是用戶對該模塊可見不可見,能不能對該模塊進行再授權的操作。表現在用戶界面就是用戶登錄系統主頁面后,可以看到的頂部菜單和左側outlookbar菜單的內容控制。作為粒度最大的權限控制,系統實現了web url的防盜鏈功能。舉例來說,用戶新開發的一個叫車輛管理的模塊,配置在http://localhost/business/carmanage.action的url下,當對這個模塊的權限加以控制后,直接在瀏覽器中鍵入http://localhost/business/carmanage.action同樣是無法訪問的,而不僅僅是界面內容的屏蔽。
? 二是模塊操作權限,在對整個模塊的權限做出控制后,這里繼續對模塊的瀏覽、增加,修改,刪除的操作權限做出控制,也可以理解為對象權限?。還是以車輛管理為例,不同的人員對這個模塊的操作是不同的,有些用戶可以新增,刪除車輛;而有些用戶則只是可以對車輛的情況查看不能修改。通過系統提供的一套web 標簽,頁面可以根據用戶不同的操作權限屏蔽相應的功能按鍵。例如刪除,新增按鍵。用戶繞過頁面直接操作相應業務方法同樣也做到了嚴格的控制,沒有權限的訪問會被拒絕同時記入日志。?
? 三是數據范圍權限,又可以叫做對象實例級權限。事實上不是每個用戶都可以看到所有記錄的。以財務管理為例,部門經理只能查看金額小于1W的數據;而總經理則沒有限制。權限系統對這部分權限也做出了全面的控制,可以根據數據類型,相應字段數值范圍做出控制。
? 四是單條數據ACL權限,為了滿足更嚴格的數據權限要求,權限系統對數據實現了單條數據的ACL權限,具體說就是對每條數據都實現了權限控制,每條數據都有一到多條權限數據與其對應。以個人通訊錄為例,每個用戶都維護自己的一個通訊錄,這些數據都只是對本人可見,其他人不可見。但用戶可以對這些數據做出授權,將某條聯系方式以授權的方式共享給其他人,并賦予不同的權限,包括擁有,修改,刪除,瀏覽四種權限。
五是數據字段權限,通過xml配置,系統保證了用戶的最小粒度的權限控制。每條業務數據權限可以精確控制到每一個字段。包括單個字段的可否瀏覽以及可否修改。保證了敏感信息的安全性。
授權,作為權限系統的重要部分,系統提供了相當方便的操作體驗。以樹狀的方式展現權限主體(用戶,角色,部門)以及資源,方便,直接,一目了然。區別與傳統的RBAC模型,權限不僅僅可以分配給角色,也可以分配給部門和用戶。實際的權限是這三者權限的疊加,最大限度的方便用戶操作。考慮到用戶的擴展,系統提供兩個權限繼承規則接口,用戶可以自定義權限繼承的規則。例如,部門A下有部門A1,部門A的權限是否由部門A1繼承。
整個權限系統的數據都建立在系統統一的緩存管理之上,用戶登錄后,其權限信息即被緩存,保證系統的效率
posted @
2007-03-18 22:46 ronghao 閱讀(4944) |
評論 (5) |
編輯 收藏
用hibernate做持久層工具,建立User對象,映射到sqlserver的USER表,但在做查詢的時候不斷的報sql錯誤,打印hibernate產生的sql語句到sqlserver查詢工具執行,報同樣的錯誤。給表名加上[]后sql可以正常執行。例如:select * from USER錯誤。select * from [USER]正確。開始以為是什么地方配置的問題。因為以前用過達夢數據庫,它默認也是必須給表名加[]的,可以通過設置數據庫屬性解決這個問題。但也沒有發現什么配置。后來在SecuritySite群提問,illusion提示是與系統表重名,更改表名后果然正常。于是感到很奇怪:USER這么常用的表名怎么會與系統表重名呢?
posted @
2007-03-11 11:29 ronghao 閱讀(1759) |
評論 (4) |
編輯 收藏
1.昨天開始在程序里增加和服務器端交互的部分。看看代碼
var?url?=?'http://localhost:8080/app/get_data';
????????var?pars?=?'';
????????
????????var?myAjax?=?new?Ajax.Request(
????????????url,?
????????????{
????????????????method:?'get',?
????????????????parameters:?pars,?
????????????????onComplete:?showResponse
????????????});
很簡單的一段程序,在firefox里始終不能工作,但在ie下一切正常。打開debugger,跟蹤調試到這一行
this.transport.open(this.options.method,?this.url,?
????????this.options.asynchronous);
在這一行執行出現問題,干掉prototype,自己寫XMLHttpRequest,問題同樣出現在同一個地方
req.open("GET",?url,?true);
ie下正常。于是開始懷疑是firefox自己的問題,firefox可能更多的從安全方面做了考慮,拒絕
http://localhost:8080這種帶域名的訪問方式。把js程序移到應用程序里,url改為
var?url?=?'/app/get_data';
問題解決,訪問正常。
2.點擊日歷單元格需要彈出一個窗口用于新增工作安排,在firfox里為了方便這樣拼寫
var?TR=document.createElement("tr");
TR.innnerHTML="<td><input?
></td>"; firfox下正常,ie顯示不出,改為下面方式則問題解決
var?TR=document.createElement("tr");
var?TD=document.createElement("td");
TD.innnerHTML="<input?
>";
TR.appendChild(TD);
posted @
2007-02-28 21:53 ronghao 閱讀(789) |
評論 (0) |
編輯 收藏
晚上9點的火車,回家!
posted @
2007-02-15 15:30 ronghao 閱讀(504) |
評論 (0) |
編輯 收藏