2011-06-08 51 views
0

我有一個具有不同角色的多個用戶的應用程序。 每個用戶對資源的訪問都受到他所具有的角色的限制。設計應用程序的最佳方式

現在,如果我正在構建一個應用程序來管理這些資源,我應該如何構建我的應用程序。

角色:管理員,版主,筆者 資源:文章

我看到兩個選項。

1: 管理員/ -add /編輯/刪除文章 -add /編輯/刪除用戶 撰文/ -add /編輯:用於提供訪問每個角色對資源的作用 如建立獨立的模塊/刪除自己的文章 版主/ - 編輯文章

2:爲每個資源創建單獨的模塊並根據訪問它們的用戶的角色給予訪問權限。 如:
文章/添加/編輯/刪除[管理根據用戶的角色操作]

的語言是PHP,我將使用Zend框架。我的問題不是關於訪問權限,因爲Zend的ACL組件負責處理它。我的問題是組織應用程序。

例如,如果引入了新用戶,在第一種情況下,我將不得不創建一個新模塊。但在第二種方法的情況下,我將不得不更新每個模塊。

很明顯,第一種方法會涉及更多的文件和更復雜的邏輯 第二種方法將需要更復雜的邏輯,但我不確定要跟隨哪一個並尋找建議。任何幫助表示讚賞。

謝謝。

回答

0

我認爲一般的做法是保持訪問邏輯與訪問資源,而不是訪問一個。

在你的例子中,這意味着如果文章只想被指定的用戶編輯,那麼它是文章的業務,以檢查誰編輯它。

所有的邏輯是這樣的:

if user is article.owner or admin 
    ...make things happen 

,如果你想添加新的用戶角色或者改變現有的行爲,您只需要編輯這一個條件,而不是漂亮的創建另一個很多同一個又一個不同的用戶模塊。

+0

你是絕對正確的。非常感謝。 – Rajesh 2011-06-09 06:59:43

0

這實際上取決於您在哪種語言/平臺中構建所有內容。大多數平臺已經構建了對安全性的支持。

此答案適用於.NET。

沒什麼特別的。使用內置的安全模型(CAS =代碼訪問安全性)。

您可以通過使用某些屬性來限制對方法的訪問。如果您正在構建MVC應用程序,則可以使用[Authorize]屬性,而在常規應用程序中,您可以使用[PrinicpalPermission]

爲了讓它工作,您需要爲所有正在運行的線程分配一個主體(System.Threading.Thread.CurrentPrincipal = new MyPrincipal(myUserInfo))。

ASP.NET自動執行此操作,並且其他應用程序將當前登錄(Windows)用戶用作默認值。

相關問題