2010-01-12 34 views
3

我正在開發面向文檔的應用程序,需要管理用戶對文檔的訪問權限。我有一個模塊處理用戶身份驗證,另一個模塊處理數據存儲上的文檔CRUD操作。一旦用戶通過身份驗證,我需要根據用戶的權限強制執行用戶可以執行的操作並且不能執行文檔。我可以想到的將這兩部分集成在一起的最佳選擇是創建另一個模塊來複制數據API,但也會將經過身份驗證的用戶作爲參數。該模塊將授權檢查委託給授權模塊,並將文檔操作委派給數據訪問模塊。例如:如何在面向文檔的系統中處理經認證的用戶對資源的訪問?

-module(auth_data_access). 

% User is authenticated (logged into the system) 
% save_doc validates if user is allowed to save the given document and if so 
% saves it returning ok, else returns {error, permission_denied} 
save_doc(Doc, User) -> 
    case auth:save_allowed(Doc, User) of 
     ok -> 
      data_access:save_doc(Doc); 
     denied -> 
      {error, permission_denied} 
    end 
    end. 

有沒有更好的方法可以處理這個問題?

+0

你在上面展示的方式似乎完全可以接受我。 – 2010-01-12 19:33:29

+1

您的錯誤處理似乎不一致。您將auth:save_allowed放入case語句,但讓data_access:save_doc在發生錯誤時崩潰。 – Zed 2010-01-12 19:39:09

+0

這不是代碼的實際示例,只是一個示例。但你說得對,它是不一致的,應該修復。 – 2010-01-13 01:52:31

回答

0

根據我的answer to "How do I elegantly check many conditions in Erlang"我更喜歡像

save_doc(Doc, User) -> 
    ok = auth:save_allowed(Doc, User), 
    data_access:save_doc(Doc). 
+0

這看起來比問題中的示例代碼更清晰,但如果有更好的通用方法來檢查/執行授權,則不會回答。 – 2010-01-13 12:18:51

相關問題