我不确定这是否是提出这个问题的最佳方式。
我已经建立了一个facebook克隆。
现在,我希望人们能够创建页面/公司简介。
所以我希望很多用户能够
A)管理这些页面(简单,只需在页面上授权用户)
B)充当这些页面,好像它们是普通的用户帐户(在页面上发帖,在整个应用程序中行动,就好像他们是普通用户一样
现在我可以这样做
i)实际创建一个不同类型的新USER。当普通用户想要充当PAGE /公司时,我实际上认证/授权他们能够,并实际将他们的登录帐户切换到第二个用户。以此用户身份登录后,他们可以使用相同的方法切换回其他用户类型。我实际上非常喜欢这个想法,因为这意味着代码变化很少,一切都应该可以正常工作。
问题 - 饼干?多个用户同时登录同一个帐户?我猜这是我的问题以及我如何构建我的常规app / cookie方法
ii)我可以在数据库中创建新类型,即页面/公司,以及我有UserId(帖子,消息,照片,图像等等)的每个地方添加PageId和CompanyId。然后,当作为页面或公司工作时,我可以记录哪个页面/公司正在进行交互。
与选项a)中的理论上干净的想法相比,这将导致相当多的代码更改,并且也会感到hacky。
然而,我可能已经错过了一些绝对大规模的安全漏洞或其他原因,为什么选项A)是一个坏主意。
任何想法?
答案 0 :(得分:1)
您的情况似乎过于复杂。您似乎想要执行以下操作:
User
模型,该模型是您唯一能够登录的模型User
模型这类似于为roles
模型添加不同的User
。
您似乎使用方法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名教师......)等。
希望采用类似于上述方法的方法有助于简化您的情况。