2009-09-29 163 views
2

我們希望能夠與新用戶或其他用戶共享Web應用程序內部的資源。我們希望通過實施邀請代碼來實現這一點。在其他應用程序(例如Google文檔)中,我曾多次看到過這種實現方式,您向其他用戶發送邀請代碼,而其他用戶將擁有第一位用戶同意的任何訪問權限。如何實現邀請碼與其他用戶共享資源?

我確定必須有一個模式或最好的方法已經記錄在某處,我只需要正確的詞來尋找它。有人能夠指出我正確的方向嗎?以下是用例:

  1. 用戶1(user1)擁有一個包含多個空格的帳戶。
  2. User1想要與User2(不在用戶表格上)共享特定空間(space9)。
  3. 用戶1向用戶2的電子郵件發送邀請碼。
  4. 用戶2註冊並輸入邀請碼或點擊鏈接註冊邀請碼。
  5. 用戶2可以訪問space9,只能訪問space9,而不能訪問user1的任何其他空間寄存器。

編輯1:(可能要使用的算法基於馬克答):

在我的域模型我有用戶和帳戶和每個用戶有0個或多個賬戶。然後我們也有SharedSpace,每個用戶有0或更多的共享空間,每個帳戶可能有0或更多的空間。現在ShareSpace的將包含(inviationCode,spaceCode,活躍(是),過期,電子郵件(份額)。

誰擁有一個帳戶(acct1任何用戶)能夠與

acct1.shareSpace("spaceCodeToShare","Emailofusertosharewith"); 
共享空間

方法ShareSpace的(字符串,字符串)將執行以下操作:

  1. 創建和發送邀請碼以電子郵件
  2. 如果用戶已註冊,他可以通過單擊或輸入代碼(使用授權或customAuthorize屬性和IPrincipal來防止未經授權的訪問)來激活其代碼。
  3. 如果用戶沒有註冊,那麼他會登錄並在創建該用戶的用戶輸入之後,他將激活該代碼。
  4. 如果用戶從未激活代碼,代碼將過期並且活動狀態切換爲false。

你以爲我錯過了什麼,它看起來比我想象的要簡單嗎?

回答

0

我不確定現有的模式。但是,這可以通過良好關係的sharedRights表結構來完成。

  • sharedRights表得到了resourceNames(空格),所有者名稱(作者)和誰的共享訪問(共享用戶)。
  • sharedRights是用戶(將參考作者和共享用戶兩者),以及resourceNames(空格)一個子表。

如果你仍然想normailze的strucre

  • 您可以創建SharedUsers這將對用戶關係(多對多)
  • SharedResources這將有SharedUsers的ID和資源名稱(多許多)
  • 而SharedRights它定義了用於sharedusers和sharedresources

finall的accessrights y它會是這樣的

Users  ---- SharedUsers  | 
            ------- SharedRights 
Resourcss ---- SharedResources | 

接受邀請後,你必須填寫這些表與必要的信息。通過引用這些表格來授予共享用戶的權限將很簡單。

1

這聽起來像權限方面將使用訪問控制列表(ACL)最佳建模。每個資源都只有一個關聯的ACL,並且默認情況下,只有原始所有者才擁有資源權限。

當你發出一個邀請碼,您錄製代碼所代表的權限一起。您需要將該關聯記錄在諸如數據庫的持久存儲中。

當被邀請用戶激活邀請碼,你宣傳你記錄到一個真正的權限的潛在許可。

我寫了更多關於基於ACL的安全herehere