到目前为止,我一直在使用 MVC区域作为我的mvc应用程序的管理部分,但最近我一直在重新考虑这个由于每个应用程序的表单身份验证不能有多个配置。
这已经成为一个问题,因为在最近的一个项目中我想设置auth cookie不会让用户过期,但我不想这对管理用户来说。我也不希望用户登录页面用于访问管理工具。
我正在考虑在解决方案中仅为管理工具设置一个单独的MVC项目。这在我看来是最好的选择,但我想知道部署的复杂性。(目前我在VS2008中使用Web部署项目来管理构建)。
目前有人在管理部分使用单独的MVC项目吗?任何陷阱?关于为什么这不是一个好主意的其他意见?
感谢。
答案 0 :(得分:8)
我总是使用单独的网站进行管理。但这主要是因为我的网站管理与使用完全不同,因此需要不同的布局。
另一个好处是,您不必怀疑用户是否可以修改他们无法修改的内容,因为这些内容未内置到用户网站中。
<强>更新强>
我的意思是使用Razor或Masterpage使用webforms视图引擎进行布局。
我们使用http://admin.domainname.com和http://www.domainname.com来分隔网站。很容易设置。
分隔站点还可以使控制器和视图更加清晰,因为它们只处理管理员或用户的任务。不需要很多ifs(否则如果你像我一样很容易添加=懒惰的编码器:)
答案 1 :(得分:2)
表单auth cookie可能是管理区域的路径限制,但在处理身份验证时会让您头疼,但可能会实现。
另一种选择,而不是使用admin.hostname.com或类似的东西,是在/ admin上使用子应用程序,但这不一定能解决您的问题。
我们将Web应用程序开发为两个不同的站点,主要是因为我们希望选择将管理与实际站点分开,也是出于可伸缩性原因。我们希望能够扩大相关的实际网站,而不是管理部分。
我们遇到了以下问题:
我认为出于可伸缩性的原因,您应该考虑将问题分开,但是如果可能的话,这一切都取决于您的应用程序的设计。我们正在为某种类型的网站构建框架,这意味着设计的实际实现因客户而异,但我们需要一种标准化的方式来管理网站,因此这对我们来说是合乎逻辑的选择。
答案 2 :(得分:1)
FormsAuthentication.SetAuthCookie
方法允许您控制是否在会话中持续存在。
如果他们是管理员,请将其设为false
,否则设为true
。
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/twk5762b.aspx(第二个参数createPersistentCookie
控制此内容。)
就不同类别用户的不同登录页面而言,如果他们是错误的用户类并访问错误的登录页面,则可以从身份验证方法返回false。
在设置身份验证令牌之前,所有这些逻辑都应该发生。
答案 3 :(得分:1)
出于多种原因,我宁愿将管理网站分开:
Separation of Concerns
(服务/数据等)意味着连接管理站点以访问主站点上可用的功能应该相对简单。AuthorizeAttribute
的基本控制器,这意味着没有正确凭据的外部用户无法访问所有操作(login
除外!)。然后,如果需要,可以使用相关凭据覆盖单个操作,但通常,这是一种“一劳永逸”的方法。虽然您可以在单站点方法中使用两个基本控制器,但我相信它的可管理性稍差。