如何构建可以控制假冒用户的其他实体的内部单用户凭据(Facebook页面/公司简介)

时间:2012-07-20 10:39:07

标签: c# asp.net-mvc web-applications architecture

我不确定这是否是提出这个问题的最佳方式。

我已经建立了一个facebook克隆。

现在,我希望人们能够创建页面/公司简介。

所以我希望很多用户能够

A)管理这些页面(简单,只需在页面上授权用户)

B)充当这些页面,好像它们是普通的用户帐户(在页面上发帖,在整个应用程序中行动,就好像他们是普通用户一样

现在我可以这样做

i)实际创建一个不同类型的新USER。当普通用户想要充当PAGE /公司时,我实际上认证/授权他们能够,并实际将他们的登录帐户切换到第二个用户。以此用户身份登录后,他们可以使用相同的方法切换回其他用户类型。我实际上非常喜欢这个想法,因为这意味着代码变化很少,一切都应该可以正常工作。

问题 - 饼干?多个用户同时登录同一个帐户?我猜这是我的问题以及我如何构建我的常规app / cookie方法

ii)我可以在数据库中创建新类型,即页面/公司,以及我有UserId(帖子,消息,照片,图像等等)的每个地方添加PageId和CompanyId。然后,当作为页面或公司工作时,我可以记录哪个页面/公司正在进行交互。

与选项a)中的理论上干净的想法相比,这将导致相当多的代码更改,并且也会感到hacky。

然而,我可能已经错过了一些绝对大规模的安全漏洞或其他原因,为什么选项A)是一个坏主意。

任何想法?

1 个答案:

答案 0 :(得分:1)

您的情况似乎过于复杂。您似乎想要执行以下操作:

  • 创建一个User模型,该模型是您唯一能够登录的模型
  • 将“其他帐户类型”添加为User模型
  • 中添加的身份验证级别

这类似于为roles模型添加不同的User

  • UserA可以拥有一个角色,允许他们做比UserB更多的事情
  • 这些角色可以根据需要来来去去

您似乎使用方法i走在正确的轨道上。想到KISS

更新 - 根据您的评论

我会回到绘图板上你想如何做到这一点 - 表面结构太不干净了,我们需要在这里更有创造力。

如果我们知道很多有关您确切结构的更多信息,我们将能够提供更多帮助,但这很乏味。话虽如此,您的解决方案存在一些本质上复杂的问题,导致了这些问题。

我会尽我所能 - 当我想到您的用户需求时,会想到这一点:

  • 感觉类似于教室环境。你有一大堆用户(学生,教师,行政管理人员)可以访问同一个区域(教室),并且有几个相似的区域(不同的教室)。
  • 如果它与教室设置类似,那么您将拥有以下角色的用户:
    • 管理员可以随时随地访问任何内容。
    • 教师可以访问他们明确教授的任何课堂。
      • 作为一名教练意味着他们可以在课堂上做比学生更多的事情。
    • 学生的权限有限,基本上只能上课,上交作业,看他们的成绩。他们唯一可以控制的是他们出现或不出现的天气。

首先,上述情况可能听起来很复杂 - 如何为这种结构设置权限方案?

易于:

  • 您有三个角色:Admin Teacher Student

  • (我将过度简化)您将[Authorize(Roles = "Admin")]放在需要用户登录的每个控制器操作上 - 因为他们可以做任何他们想做的事情。

  • 您允许Teacher几乎完全控制与他们教授的课程相关的任何操作:if User.IsInRole("Teacher") && User.Name == classroom.Teacher

  • 您允许Student对其可以执行的操作有更大的限制,并且如果用户实际上在教室中,则会进一步限制:if User.IsInRole("Student") && User.Name.IsInList().List<Enrollments>EnrollmentListForCurrentClassroom(非常伪代码)< / p>

您只有三个角色,但您可以通过不仅仅是角色来限制对数据库的不同部分的访问 - 您可以通过天气限制访问,用户也已添加到班级中已注册学生的列表中,教授班级的教师名单(每班通常只有1名教师......)等。

希望采用类似于上述方法的方法有助于简化您的情况。