如何实现邀请代码与其他用户共享资源?

时间:2009-09-29 13:52:19

标签: c# asp.net asp.net-mvc algorithm

我们希望能够与新用户或其他用户共享我们的Web应用程序内的资源。我们希望通过实施邀请代码来实现此目的。我之前已经在其他应用程序(例如谷歌文档)中看到过这种情况,其中您向另一个用户发送邀请代码,而其他用户将拥有第一个用户同意的任何访问权限。

我确信必须有一个模式,或者已经记录在某处的最佳方法,我只需要正确的单词来寻找它。有人能指出我正确的方向吗?以下是用例:

  1. 用户1(user1)拥有多个空格的帐户。
  2. User1想要与User2共享特定空间(space9)(在用户表中是否存在)。
  3. User1向user2的电子邮件发送邀请代码。
  4. 用户2注册并输入邀请代码或点击链接以注册邀请代码。
  5. User2可以访问space9,只能访问space9,而不能访问user1的任何其他空间注册。
  6. 编辑1:(根据标记答案可能使用的算法):

    在我的域模型中,我有用户和帐户,每个用户有0个或更多帐户。然后我们也有SharedSpace,每个用户有0个或更多的共享空间,每个帐户可能有0个或更多的共享空间。现在,Sharespace将包含(inviationCode,spaceCode,active(yes),expiration,email(share with)。

    拥有帐户(acct1)的任何用户都可以与

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

    方法shareSpace(string,string)将执行以下操作:

      
         
        
    1. 创建邀请代码并将其发送至电子邮件
    2.   
    3. 如果用户已注册,则会激活其代码,无论是单击还是输入(使用authorize或customAuthorize属性和IPrincipal以防止未经授权的访问)。
    4.   
    5. 如果用户未注册,则他登录并在创建此用户的用户条目后,他会激活该代码。
    6.   
    7. 如果用户从未激活代码,则代码将过期,活动状态将切换为false。
    8.   

    你认为我错过了什么,看起来比我想象的要简单吗?

2 个答案:

答案 0 :(得分:1)

在我看来,权限方面最好使用访问控制列表(ACL)进行建模。每个资源只有一个关联的ACL,默认情况下,只有原始所有者才拥有该资源的权限。

当您发出邀请代码时,您会记录该代码及其代表的权限。您需要在持久存储(例如数据库)中记录该关联。

当受邀用户激活邀请代码时,您可以将您录制的潜在权限提升为真实权限。

我写了更多关于基于ACL的安全性herehere

答案 1 :(得分:0)

我不确定现有的模式。但这可以通过良好关系的sharedRights表结构来完成。

  • sharedRights表获取了resourceNames(空格),所有者名称(作者)以及获得共享访问权限的人员(共享用户)。
  • sharedRights是用户的子表(它将引用作者和共享用户)和resourceNames(空格)。

如果你仍然想要挪威克拉下来

  • 您可以创建具有用户关系(多对多)的SharedUsers
  • SharedResources将具有SharedUsers的ID和资源名称(多对多)
  • 还定义了共享用户和共享资源的访问权限的SharedRights

最后它会像

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

接受邀请后,您必须使用必要的信息填充这些表。通过引用这些表来向共享用户授予权限很简单。