2005年10月11日

再談簡易型『權限管理』機制

前言

目前還沒寫出可用版本,繼續在這邊唬爛一下相關的問題與解決方案。不知道什麼此篇所談的簡易型『權限管理』機制的過客請先參考 簡易型『權限管理』機制 這篇唬爛文一下!

因為目前選單功能表經常以樹狀結構顯示使用者的可用功能,有沒有可能直接從權限機制中記錄完整的功能選單呢?

本來是認為可以從 resource 這個欄位中去進行設定而分出第一階、第二階等的層級概念,但隨即發覺: 這是權限管理機制,不是功能表管理系統 。所以樹狀結構之建構動作應該由應用系統本身去考慮,不要與權限機制太過密切!

實際的權限資料記錄格式是否僅能使用資料庫記錄呢?

咦?這位過客很不專心喔!前文中不是有提到可記錄在商用資料庫、 XMLLDAP 資料庫 中嗎?

關於資料的記錄方式有沒有更多的提示呢?

呃… 這是個好問題!

和關連式資料庫的表格式記錄不同,不管是 XML 或是 LDAP 都可以將權限記錄以階層的方式加以保存。以 LDAP 來說通常是以人為主的記錄方式,也就是 LDAP 會將某個人的權限設定資料統一儲存在該員的名錄之下(但是實體上不一定會放在一起),所以通常在取得該員的身份認證目錄結構後也等於取得了所有的被授權清單。

採用關連式資料庫記錄的話,因為可以選擇排序的條件之故而得以任意變更參考的主軸是人還是功能,這表示採用這種記錄方式的開發人員可以增加傳回某個功能的所有使用者這樣的應用程式界面(API)。

採用 XML 記錄的話,則可以選擇以人為主還是以功能為主的記錄方式,這會造成 XML 解析上的改變。但不管選擇何種方式都應該要提供與其他記錄方式一致性的 API 使用習慣,或許選擇以人為主的記錄方式會較佳,如下例:
XML 之參考樣式範例
<?xml version="1.0" encoding="Big5"?>
<!-- 一種 Access Control 設定 -->
<accessControl>
  <!-- 屬於 E00948 這個動作者的權限記錄 -->
  <set actor="E00948">
    <access>Entry.jsp</access>
    <access>FormQuery.jsp</access>
  </set>
  <!-- 屬於 E00573 這個動作者的權限記錄 -->
  <set actor="E00573">
    <access>Entry.jsp</access>
    <access>applyform</access>
    <access>FormQuery.jsp</access>
    <!-- 這項功能僅限 PROJ-0001 這個資源可以使用 -->
    <access resource="PROJ-0001">rejectForm</access>
  </set>
</accessControl>

這種權限管理機制可以和 Spring 等 Framework 合併使用嗎?

哇… 啊… 哉… :p 等 跑吧!電腦 下個月正式講到 Spring 的範例後,再考慮要不要回頭來回覆這個問題!