我们希望能够与新用户或其他用户共享 Web 应用程序内的资源。我们希望通过实施邀请码来做到这一点。我之前在其他应用程序(例如谷歌文档)中已经多次看到过这种实现,您可以在其中向另一个用户发送邀请代码,并且其他用户将拥有第一个用户同意的任何访问权限。
我确信必须有一种模式,或者已经在某处记录的最佳方法,我只需要正确的词语来寻找它。有人能指出我正确的方向吗?以下是用例:
- 用户一 (user1) 拥有一个包含多个空间的帐户。
- User1 希望与 User2 共享特定空间 (space9)(位于或不在用户表上)。
- 用户1向用户2的邮箱发送邀请码。
- 用户2注册并输入邀请码或点击链接使用邀请码注册。
- User2 可以访问 space9,并且只能访问 space9,而不能访问 user1 的任何其他空间寄存器。
Edit 1:(根据标记答案可能使用的算法):
在我的域模型中,我有用户和帐户,每个用户有 0 个或多个帐户。然后我们还有SharedSpace,每个用户有0个或多个共享空间,每个帐户可能有0个或多个共享空间。现在共享空间将包含(inviationCode、spaceCode、活动(是)、过期、电子邮件(共享)。
任何拥有帐户 (acct1) 的用户都可以与以下人员共享空间
acct1.shareSpace("spaceCodeToShare","Emailofusertosharewith");
shareSpace(string,string) 方法将执行以下操作:
- 创建邀请码并将其发送到电子邮件
- 如果用户已注册,则他可以通过单击或输入代码来激活其代码(使用授权或 customAuthorize 属性和 IPrincipal 来防止未经授权的访问)。
- 如果用户未注册,则他会登录,并在创建该用户的用户条目后激活代码。
- 如果用户从未激活该代码,则该代码将过期并且活动状态将切换为 false。
你认为我错过了什么吗?它看起来比我想象的更简单?
在我看来,权限方面最好使用以下方式建模访问控制列表(ACL)。每个资源只有一个关联的 ACL,默认情况下,只有原始所有者才拥有该资源的权限。
当您发送邀请代码时,您会记录该代码及其代表的权限。您需要将该关联记录在持久存储(例如数据库)中。
当受邀用户激活邀请码时,您将记录的潜在权限提升为真实权限。
我写了更多关于基于 ACL 的安全性的文章here https://stackoverflow.com/questions/1315221/what-is-the-best-mechanism-to-implement-granular-security-i-e-authorization-in/1315510#1315510 and here https://stackoverflow.com/questions/1335315/access-control-in-asp-net-mvc-depending-on-input-parameters-service-layer/1336404#1336404.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)