2005年10月4日

最近對『權限管理機制』的看法

幾乎每一套企業內部使用到的系統都得要有的機制是啥?我想十之八九會是『權限管理』機制吧!

說是權限管理機制,它不算困難,卻也不容易做的很有彈性。更進一步來說愈是高彈性的機制通常也就表示使用上得花一點力氣去操作,說起來也是蠻累人的!

權限管理通常分為兩部份: 身份認證 以及 存取控制

身份認證 比較簡單,反正就是給定待認證資訊後與系統進行比對並將結果回覆給呼叫端,最近的作法是透過 Microsoft 的 ActiveDirectory 機制以 LDAP 協定進行查詢即可。

存取控制 就討厭多了,通常會有以下的控制要求:

  1. 可否使用:具備某項功能的使用權
  2. 可否新增:具備某種資料的新增權
  3. 可否刪除:具備某種資料的刪除權
  4. 可否讀取:具備某種資料的讀取權
  5. 可否修改:具備某種資料的修改權
  6. 可以接觸的資源種類:有時候會有同一個人要管理多重資料來源的情形,此時會發生除了功能上的使用權問題外,還會發生資料上的使用權。例如:模組工程師可以查看所屬模組的相關資料;專案經理則可以接觸多個模組的資料等。
過去的想法是希望能用一個 Java Class 完成這方面的控制,這種作法會導致混雜兩種不同型式的存取設定,增添開發及後續維護上的複雜度。

目前的想法則是改為將功能的使用權與資料的使用權分別處理,可以想像的到的好處有:

  1. 需求單一:無論功能的使用權和資料的使用權是一項資源的使用概念。
  2. 開發/設定簡單:不管是設定或開發過程,都只需針對一種資源做管理。
  3. 符合使用流程:通常在企業系統的操作上是有先後順序的,一般都是先檢查功能的使用權後,再試結果再取得資料的使用權並完成對資料庫的資料擷取動作。
碰到的問題:
  1. 權限參數的取得:以前通常是存在資料庫中(可以用 Hibernate framework 擷取)或是放在 XML 檔中(可以使用 JAXB 擷取),不管那一種都要再研究一下。個人是覺得一來變動情形不大、二來資料量也不大的關係,想使用 XML 檔對應即可。
  2. 權限規劃的實作:要用 Role & User 作管理呢,還是以 User 為主即可?